我有第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
提前谢谢!
答案 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结合起来(假设您希望保留原始尺寸)。