使用 dplyr,我想使用条件语句来总结数据集中的组,其中存在两个条件会触发 TRUE 值,而所有其他排列会触发 FALSE。最好用一个例子来说明。假设我们有一个数据集,其中对每个 id 编号内的分类变量进行了多次观察
df <- data.frame(id = factor(c(1, 2, 2, 3, 3, 4, 4)),
l = factor(c("a", "a", "b", "a", "c", "b", "d")))
df
# id l
# 1 1 a
# 2 2 a
# 3 2 b
# 4 3 a
# 5 3 c
# 6 4 b
# 7 4 d
现在假设我希望仅当 id 组同时具有 a
时才出现 TRUE和 c
在其中。
我可以创建一个条件,如果 id 组具有 a
,则返回 TRUE或c
使用any()
dplyr 中的函数
df %>%
group_by(id) %>%
summarise(ab = any(l %in% c("a", "c")))
# id ab
# <fct> <lgl>
# 1 1 TRUE
# 2 2 TRUE
# 3 3 TRUE
# 4 4 FALSE
在 any()
的文档中它说all()
则相反。
library(dplyr)
df %>%
group_by(id) %>%
summarise(ab = all(l %in% c("a", "c")))
# id ab
# <fct> <lgl>
# 1 1 TRUE
# 2 2 FALSE
# 3 3 TRUE
# 4 4 FALSE
这很接近,但不太正确,因为 id 号 1 只有一个观察结果,因此不能同时满足这两个条件。
有人可以提出解决方案吗?
最佳答案
反转%in%
语句。
您想知道 c("a", "c")
的“所有”是否都在该组中,而不是所有组是否都在 c("a", “c”)
df %>%
group_by(id) %>%
summarise(ab = all(c("a", "c") %in% l))
#> # A tibble: 4 x 2
#> id ab
#> <fct> <lgl>
#> 1 1 FALSE
#> 2 2 FALSE
#> 3 3 TRUE
#> 4 4 FALSE
关于r - dplyr 组内的条件语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71378534/