R 计数按和条件分组的记录

R 计数按和条件分组的记录,r,R,我有这个数据集 ID | days 1 | 2 1 | 31 1 | 22 2 | 24 2 | 19 我想创建一个具有相同ID计数的新列,但天数大于20 ID | days | Count 1 | 2 | 2 1 | 31 | 2 1 | 22 | 2 2 | 24 | 1 2 | 19 | 1 我试过这个: dataset1 = dataset1[ days > 20,count_IDs :=.N, by = 'ID' ] 但这只为那些天>

我有这个数据集

ID | days 

1  |  2
1  | 31
1  | 22
2  | 24
2  | 19
我想创建一个具有相同ID计数的新列,但天数大于20

ID | days | Count

1  |  2  | 2
1  | 31  | 2
1  | 22  | 2
2  | 24  | 1
2  | 19  | 1
我试过这个:

dataset1 = dataset1[ days > 20,count_IDs :=.N, by = 'ID' ]
但这只为那些天>20的行分配一个值,我想在相同ID的所有行中添加该值。
如果可以使用data.frame解决此问题,则最好采用多种方法:

使用基本R
ave
计算每个
ID
大于20的
天数

df$Count <- ave(df$days, df$ID, FUN = function(x) sum(x>20))

df
#  ID days Count
#1  1    2     2
#2  1   31     2
#3  1   22     2
#4  2   24     1
#5  2   19     1

请编辑您的示例,以便我们能更清楚地看到它。使用
dput()
为示例数据创建可复制的代码。尽管您要求使用data.frame解决方案,
dat[,count:=sum(days>20),by=ID]
将在
data.table
中执行。或者,如果您想使用与原始逻辑类似的东西,可以通过合并
dat[dat[days>20.N,by=ID],on=“ID”]
非常感谢。它只有在ID唯一的情况下才有值,而在其他情况下它是空白的。我在这些列ID和天之间有更多的列,这可能是原因吗?编辑:我的一些天值是空的,这可能是?@Shigaell如果某些ID的天值是空的,那么它应该返回0。您可以使用(df,ave(days>20,ID,FUN=sum))
使
ave
更加紧凑
,空白值显然是NAs,我只是在前面添加了一条语句,将所有这些转换为0,然后建议的解决方案运行良好。
library(dplyr)
df %>%
  group_by(ID) %>%
  mutate(Count = sum(days > 20))