我有一个数据框:
df <- data.frame(
id = c(1, 2, 3),
`1` = c("W4", "W5", 49),
`2` = c("L", "O1", "P6"),
`3` = c(1, 2, 10),
`4` = c("H7", NA, "K"),
`5` = c("J8", NA, NA)
)
如何将列与sep = ","
(tidyr :: separate()的反面,我猜?)
期望的输出:
id string
1 W4, L, 1, H7, J8
2 W5, O1, 2
3 49, P6, 10, K
提前致谢!
修改
我担心使用paste
因为在我的真实数据集中我有1000列。
答案 0 :(得分:10)
您可以使用unite
中的tidyr
功能:
library(tidyr)
unite(df, string, X1:X5, sep = ", ")
# id string
#1 1 W4, L, 1, H7, J8
#2 2 W5, O1, 2, NA, NA
#3 3 49, P6, 10, K, NA
请注意,默认情况下它还有一个remove
参数TRUE
。如果将其设置为FALSE
,原始列将保留在数据中。
对于列规范(要联合的列),您可以像上面一样使用冒号运算符(:
)或使用?dplyr::select
中描述的特殊函数。
答案 1 :(得分:3)
我们可以在没有任何软件包的base R
中执行此操作
data.frame(id = df[1], string= do.call(paste, c(df[-1], sep=",")))
# id string
#1 1 W4,L,1,H7,J8
#2 2 W5,O1,2,NA,NA
#3 3 49,P6,10,K,NA
答案 2 :(得分:0)
另一种方法可以做如下:
mdf <- df %>% transform(strings=paste(X1,X2,X3,X4,X5, sep = ","))
mydf <- mdf[,c(1,7)]
> mydf
# id strings
#1 1 W4,L,1,H7,J8
#2 2 W5,O1,2,NA,NA
#3 3 49,P6,10,K,NA
答案 3 :(得分:-1)
这是使用'unite'的另一个例子,它与'separate'相反...
从以下数据框开始,df有3列('年','月'和'天'):
<强> DF 强>
年月日
1 2009 01 01
如果我们想将'year','month'和'day'列连接到一个名为'time'的列中,使用连字符作为分隔符,我们可以使用unite:
df%&gt;%unite(时间,c(“年”,“月”,“天”),sep =“ - ”)
时间
1 2009-01-01