![](/img/trans.png)
[英]How to combine multiple columns into one column and attach their unique code in 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
在这里,我们可以使用paste
或str_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
使用paste0
的data.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.