3

我有第 1 列和第 2 列(ID 和值)。接下来,我想要一个计数列,列出每个 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

先感谢您!

4

3 回答 3

5

You can use ave:

df <- within(df, Count <- ave(ID, list(ID, Value), FUN=length))
于 2013-08-22T19:23:35.117 回答
1

您可以ddply从 plyr 包中使用:

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 所建议的,如果您正在使用大型 data.frame ,您可以替换transformmutate

于 2013-08-22T19:40:16.573 回答
1

当然,data.table 也有解决办法!

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

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

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

于 2013-08-22T19:41:12.263 回答