r - dplyr 组内的条件语句

标签 r dplyr

使用 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/

相关文章:

r - 如何在同一个图表上组合一条线和散点图?

r - 使用箭头函数将存储在数据框中的置信限度添加到条形图

r - 创建带有 mutate(x = x*2) 的函数(data, x) 不起作用

r 将多列数据合并为一列

R gsub/str_replace 返回反斜杠

R dplyr 到数据表 - 分组和过滤

r - 是否有函数可以反转 data.table 中值的出现次数?

R data.table列名在函数中不起作用

r - Shiny + DT : Single Cell Selection

r - Dplyr:重新编码数字和字符向量