合并一行中的唯一值

时间:2016-02-09 11:36:43

标签: r merge

我有一些数据,其中第一列有一些重复的行,认为另一列来自所有不同的数据。我需要在第一列中只留下一个重复行,并将来自另一列的不同行合并。例如

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

有可能吗?

3 个答案:

答案 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))

给出相同的结果。