我有一些数据,其中第一列有一些重复的行,认为另一列来自所有不同的数据。我需要在第一列中只留下一个重复行,并将来自另一列的不同行合并。例如
Z = c( "a", "a", "b", "c", "d", "d", "d")
X = c( 10, 10, 0, 3, 4, 4, 4)
Y = c("ab", "bc", "dv", "mh", "op", "va", "po")
c = data.frame(Z,X,Y)
c
Z X Y
1 a 10 ab
2 a 10 bc
3 b 0 dv
4 c 3 mh
5 d 4 op
6 d 4 va
7 d 4 po
我需要合并
Z X Y
a 10 ab,bc
b 0 dv
c 3 mh
d 4 op, va, po
甚至
Z X Y L V
a 10 ab bc
b 0 dv
c 3 mh
d 4 op va po
有可能吗?
答案 0 :(得分:2)
我们可以尝试data.table
library(data.table)
setDT(c)[, .(X = unique(X), Y = paste(Y, collapse = ",")), by = Z]
# Z X Y
#1: a 10 ab,bc
#2: b 0 dv
#3: c 3 mh
#4: d 4 op,va,po
答案 1 :(得分:1)
plyr
包在这些情况下很方便:
library(plyr)
ddply(c, c("Z", "X"), summarise, Y= paste(Y, collapse = ","))
Z X Y
1 a 10 ab,bc
2 b 0 dv
3 c 3 mh
4 d 4 op,va,po
答案 2 :(得分:1)
在基地R:
aggregate(Y ~ Z + X, data = c, toString)
给出:
Z X Y
1 b 0 dv
2 c 3 mh
3 d 4 op, va, po
4 a 10 ab, bc
或使用 dplyr :
library(dplyr)
c %>% group_by(Z,X) %>% summarise(Y = toString(Y))
给出相同的结果。