R计算重复值并将它们添加到单独的向量中

时间:2014-03-20 15:54:37

标签: r

x <- c(1,1,1,2,3,3,4,4,4,5,6,6,6,6,6,7,7,8,8,8,8)
y <- c('A','A','C','A','B','B','A','C','C','B','A','A','C','C','B','A','C','A','A','A','B')
X <- data.frame(x,y)

上面我有一个数据框,我想在向量x中识别重复项,同时计算两个(x,y)的重复实例数....  例如,我发现ddply和这篇帖子与我想要的相似(Find how many times duplicated rows repeat in R data frame)。

library(ddply)
ddply(X,.(x,y), nrow)

这计算实例的数量1 - A发生的次数是2次......但是我正在寻找R来返回向量x中的唯一标识符,其中x与列y中的匹配次数相同(去掉了如果需要,矢量y,如下所示..

x  A  B  C
1  2  0  1
2  1  0  0
3  0  2  0
4  1  0  2
5  0  1  0
6  2  1  2 

任何帮助将不胜感激,谢谢

2 个答案:

答案 0 :(得分:7)

您只需要table功能:)

> table(X)
   y
x   A B C
  1 2 0 1
  2 1 0 0
  3 0 2 0
  4 1 0 2
  5 0 1 0
  6 2 1 2
  7 1 0 1
  8 3 1 0

答案 1 :(得分:3)

通过投射您的data.frame来实现这一点非常简单。

require(reshape2)
dcast(X, x ~ y, fun.aggregate=length)

或者,如果您希望事情变得更快(比如处理大数据),那么您可以使用dcast.data.table包中新实现的data.table函数:

require(data.table) ## >= 1.9.0
setDT(X)            ## convert data.frame to data.table by reference
dcast.data.table(X, x ~ y, fun.aggregate=length)

两者都导致:

   x A B C
1: 1 2 0 1
2: 2 1 0 0
3: 3 0 2 0
4: 4 1 0 2
5: 5 0 1 0
6: 6 2 1 2
7: 7 1 0 1
8: 8 3 1 0