使用R:创建一个新列,计算“n”个其他列的'n'条件发生的次数

时间:2013-08-22 19:17:30

标签: r

我有第1列和第2列(ID和值)。接下来我想要一个count列,列出每个id出现相同值的次数。如果它不止一次出现,它显然会重复该值。此数据集中还有其他变量,但新计数变量只需要有2个条件。我已经浏览了这个博客,但我找不到一种方法来使新变量以多个变量为条件。

ID     Value     Count
1        a         2 
1        a         2 
1        b         1
2        a         2
2        a         2
3        a         1
3        b         3
3        b         3
3        b         3

提前谢谢!

3 个答案:

答案 0 :(得分:5)

您可以使用ave

df <- within(df, Count <- ave(ID, list(ID, Value), FUN=length))

答案 1 :(得分:1)

您可以使用plyr包中的ddply

library(plyr)
df1<-ddply(df,.(ID,Value), transform, count1=length(ID))
>df1
  ID Value Count count1
1  1     a     2      2
2  1     a     2      2
3  1     b     1      1
4  2     a     2      2
5  2     a     2      2
6  3     a     1      1
7  3     b     3      3
8  3     b     3      3
9  3     b     3      3
> identical(df1$Count,df1$count1)
[1] TRUE

更新:根据@Arun的建议,如果您正在使用大型数据,则可以将transform替换为mutate

答案 2 :(得分:1)

当然,data.table也有解决方案!

data[, Count := .N, by = list(ID, Value)

内置常量“.N”是一个长度为1的向量,报告每组中的观察数量。

这种方法的缺点是将此结果与您的初始data.frame结合起来(假设您希望保留原始尺寸)。