如何在两个条件下使用 R 中的 'sum' 而不进行过滤?



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

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

我不明白的是为什么下面的代码不能给出相同的数值结果:

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

如果这不是用函数sum求满足条件1和条件2的情况数的方法,还有其他方法吗?最重要的是,为什么这种方式不像人们预期的那样起作用?它列举的是什么而不是同时满足两个条件的情况的数量?

可以简化为使用'condition'的逻辑表达式为'column2'创建子集,然后在该子集上进行第二次比较,以创建sum的逻辑表达式

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

注意:对于==,NA的存在可能会产生一个剧透。对于属于NA的元素,==返回NA。因此,为了抵消这一点,sum中的na.rm = TRUE会更好


或者&

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(&)表达式而不是|,并且该语法在summarise/mutate中不会被翻译成这样。在这里,我们需要显式地指定&条件。

另外,=是赋值操作符而不是比较操作符(==)

相关内容

  • 没有找到相关文章

最新更新