繁体   English   中英

如何将一列数据附加到 R 中的多列

[英]How to attach data a column to multiple columns in R

这是我的数据

df<-read.table (text="CBC   DSE BMD
1   S   BM
1   S   BM
1   S   BM
2   S   BM
2   S   BM
2   S   BM
3   S   BM
3   S   BM
3   S   BM
", header=TRUE)

我想将 CBC 列中的数据附加到 DSE 和 BMD 列

我可以用

df %>% unite(DSE, DSE, CBC, sep="")

但这给了我 DSE,但是当我使用

df %>% unite(DSE, DSE, CBC, sep="")%>% unite(BMD, BMD, CBC, sep="")

我收到错误,因为我不会得到以下结果

CBC DSE BMD
1   S1  BM1
1   S1  BM1
1   S1  BM1
2   S2  BM2
2   S2  BM2
2   S2  BM2
3   S3  BM3
3   S3  BM3
3   S3  BM3

在这里,我们可以使用pastestr_c

library(dplyr)
library(tidyr)
library(stringr)
df %>%
    mutate(DSE = str_c(DSE, CBC), BMD = str_c(BMD, CBC))

-输出

#  CBC DSE BMD
#1   1  S1 BM1
#2   1  S1 BM1
#3   1  S1 BM1
#4   2  S2 BM2
#5   2  S2 BM2
#6   2  S2 BM2
#7   3  S3 BM3
#8   3  S3 BM3
#9   3  S3 BM3

或者对于多列,可以使用across

df %>%
    mutate(across(c(DSE, BMD), ~ str_c(., CBC)))

或者,如果我们打算使用unite ,请确保指定remove = FALSE 默认情况下,它是remove = TRUE ,因此会删除用于unite的输入列

df %>%
   unite(DSE, DSE, CBC, sep="", remove = FALSE) %>% 
   unite(BMD, BMD, CBC, sep="", remove = FALSE)

在 OP 的代码中,第二个单元出现错误,因为在前一个单元中删除了“ unite ”列,因为unite remove = TRUE

使用paste0data.table选项

setDT(df)[, c("DSE", "BMD") := lapply(.SD, function(x) paste0(x, CBC)), .SDcols = DSE:BMD]

> df
   CBC DSE BMD
1:   1  S1 BM1
2:   1  S1 BM1
3:   1  S1 BM1
4:   2  S2 BM2
5:   2  S2 BM2
6:   2  S2 BM2
7:   3  S3 BM3
8:   3  S3 BM3
9:   3  S3 BM3

在基础 R 中,您可以执行以下操作:

transform(df, DSE = paste0(DSE, CBC), BMD = paste0(BMD, CBC))

#  CBC DSE BMD
#1   1  S1 BM1
#2   1  S1 BM1
#3   1  S1 BM1
#4   2  S2 BM2
#5   2  S2 BM2
#6   2  S2 BM2
#7   3  S3 BM3
#8   3  S3 BM3
#9   3  S3 BM3

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM