【发布时间】:2017-04-11 00:54:57
【问题描述】:
如何根据各个行的条件选择组,比如保留所有包含 至少一个 (ANY) 特定值的组,例如4,(或至少一次TRUE 的任何其他条件)。或者反过来说:如果一个组没有有任何条件为真的行,则应该删除整个组。
我们来看一个非常简单的数据,有两组,我想选择至少有一行Value为4的组,(即此处的组B)
library(dplyr)
df <- data.frame(Group = LETTERS[c(1,1,1,2,2,2)], Value=c(1:5, 4))
df
# Group Value
# 1 A 1 # Group A has no values == 4 ~~> remove entire group
# 2 A 2
# 3 B 3
# 4 B 4 # Group B has at least one 4 ~~> keep the whole group
执行group_by(),然后执行filter(如this post)将只选择包含值4的单个行,而不是整个组:
df %>%
group_by(Group) %>%
filter(Value == 4)
# Group Value
# <fctr> <int>
# 1 B 4
【问题讨论】:
-
在基础 R 中,
df[with(df, ave(Value == 4, Group, FUN = any)), ]