首页 > 解决方案 > 如何在没有过滤的情况下在 R 中使用两个条件的“总和”?

问题描述

我想要满足两个条件(与两个不同的列相关)的所有案例的总和。可以使用

dataset %>%
 filter (column1 == 'condition1') %>%
 summarise (number = sum(column2 == 'condition2'))

我不明白的是为什么以下没有给出相同的数值结果:

dataset %>%
 summarise (number = sum(column1 == 'condition1', column2 == 'condition2'))

如果这不是通过 function 获得满足条件 1 和条件 2 的案例数量的方法sum,还有其他方法吗?最重要的是,为什么这种方式不能按预期工作?它列举的是什么而不是同时满足这两个条件的案例数量?

标签: r

解决方案


可以通过使用“条件”的逻辑表达式对“column2”进行子集化,然后对该子集进行第二次比较以创建逻辑表达式来简化它sum

library(dplyr)
dataset %>%
      summarise(number = sum(column2[column1 == 'condition1']
        == 'condition2', na.rm = TRUE))

注意:对于==,一个问题可能会造成剧透,即NA. 那些元素的==回报NANA. 所以,为了抵消这一点na.rm = TRUEsum最好


或者另一种选择是&

dataset %>%
   summarise (number = sum(column1 == 'condition1' &
                           column2 == 'condition2', na.rm = TRUE))

或者另一种选择是指定条件filter并获取nrow

dataset %>%
   filter(column1 == 'condition1', column2 == 'condition2') %>%
   nrow()

&方法的问题是我们可能正在寻找两者都为 TRUE 的相应行。因此,它可能是第一个我们只寻找“condition2”为 TRUE 的子集情况的逻辑表达式


注意:在dplyr::filter中,如果我们传递多个由 分隔的逻辑表达式,,则将其视为AND( &) 表达式而不是 a |,并且该语法不会被翻译summarise/mutate成这样。在那里,我们需要明确指定&条件。

此外,=是赋值运算符而不是比较 ( ==)


推荐阅读