我想要满足两个条件(与两个不同列相关)的所有情况的总和。可以使用
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
中不会被翻译成这样。在这里,我们需要显式地指定&
条件。
另外,=
是赋值操作符而不是比较操作符(==
)