如果数组中的一行包含给定值R,则返回完整数组

时间:2014-12-16 21:21:45

标签: r

我有嵌套的数据,如下所示:

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代码的额外点!

2 个答案:

答案 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)), ]