计数组的ID如果一个变量在组中相等

  • 本文关键字:变量 一个 数组 ID 如果 r
  • 更新时间 :
  • 英文 :


i在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")

这是两个解决方案,均使用base R,一个与aggregate更复杂,另一个与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

dplyr解决方案:

library(dplyr)
df1 %>% 
  group_by(Group.ID) %>% 
  filter(cumsum(status == "open") == 2) %>%
  nrow()

最新更新