如果组中的一个变量相等,则计算组的ID

我在R中有一个数据框,如下所示:

  Group.ID status
1        1   open
2        1   open
3        2   open
4        2 closed
5        2 closed
6        3   open

我想计算条件下的ID数量:当所有状态对于相同的ID号都是“打开”时.例如,组ID 1有两个观察值,它们的状态都是“打开”的,所以这是我的计数.组ID 2不是因为并非所有状态都为组ID 2打开.

我可以在条件下统计行或组ID.但是我不知道如何应用“所有状态等于一个组的值”逻辑.

数据.

df1 <-
structure(list(Group.ID = c(1, 1, 2, 2, 2, 3), status = structure(c(2L, 
2L, 2L, 1L, 1L, 2L), .Label = c("closed", "open"), class = "factor")), .Names = c("Group.ID", 
"status"), row.names = c(NA, -6L), class = "data.frame")

最佳答案 这里有两个解决方案,两个都使用基数R,一个更复杂的聚合,另一个使用tapply.如果您只想要与您请求的Group.ID匹配的总数,我建议您使用第二个解决方案.

agg <- aggregate(status ~ Group.ID, df1, function(x) as.integer(all(x == "open")))
sum(agg$status)
#[1] 2

sum(tapply(df1$status, df1$Group.ID, FUN = function(x) all(x == "open")))
#[1] 2
点赞