我有嵌套的数据,如下所示:
ID Date Behavior
1 1 FALSE
1 2 TRUE
1 3 TRUE
2 1 TRUE
2 2 FALSE
3 1 TRUE
3 2 TRUE
我想返回包含至少一次FALSE
次的给定ID的每个值数组。我希望返回ID 1和ID 2,每行显示当前数据(ID 1为3行,ID2为2行)。
ID Date Behavior
1 1 FALSE
1 2 TRUE
1 3 TRUE
2 1 TRUE
2 2 FALSE
我想知道这是for
循环还是while
函数 - 感谢任何所有帮助......
模仿R代码的python代码的额外点!
答案 0 :(得分:3)
这是一种可能的data.table
方法(假设df
是您的数据集)
library(data.table)
setDT(df)[, .SD[any(!Behavior)], ID] # you can also replace any(!Behavior) with !all(Behavior)
# ID Date Behavior
# 1: 1 1 FALSE
# 2: 1 2 TRUE
# 3: 1 3 TRUE
# 4: 2 1 TRUE
# 5: 2 2 FALSE
编辑:@Arun提供更有效的解决方案
setDT(df)[, if (any(!Behavior)) .SD, ID]
或类似的dplyr
方法
library(dplyr)
df %>%
group_by(ID) %>%
filter(any(!Behavior))
# Source: local data table [5 x 3]
# Groups: ID
#
# ID Date Behavior
# 1 1 1 FALSE
# 2 1 2 TRUE
# 3 1 3 TRUE
# 4 2 1 TRUE
# 5 2 2 FALSE
答案 1 :(得分:1)
这里使用基础R(假设您的数据位于名为dd
的data.frame中)
dd[with(dd, ave(!Behavior, ID, FUN=any)), ]