r - 如何在没有过滤的情况下在 R 中使用两个条件的“总和”?
问题描述
我想要满足两个条件(与两个不同的列相关)的所有案例的总和。可以使用
dataset %>%
filter (column1 == 'condition1') %>%
summarise (number = sum(column2 == 'condition2'))
我不明白的是为什么以下没有给出相同的数值结果:
dataset %>%
summarise (number = sum(column1 == 'condition1', column2 == 'condition2'))
如果这不是通过 function 获得满足条件 1 和条件 2 的案例数量的方法sum
,还有其他方法吗?最重要的是,为什么这种方式不能按预期工作?它列举的是什么而不是同时满足这两个条件的案例数量?
解决方案
可以通过使用“条件”的逻辑表达式对“column2”进行子集化,然后对该子集进行第二次比较以创建逻辑表达式来简化它sum
library(dplyr)
dataset %>%
summarise(number = sum(column2[column1 == 'condition1']
== 'condition2', na.rm = TRUE))
注意:对于==
,一个问题可能会造成剧透,即NA
. 那些元素的==
回报NA
是NA
. 所以,为了抵消这一点na.rm = TRUE
,sum
最好
或者另一种选择是&
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
成这样。在那里,我们需要明确指定&
条件。
此外,=
是赋值运算符而不是比较 ( ==
)
推荐阅读
- sharepoint - 从列表发送链接到页面查看器 (SharePoint)
- c - 如何计算斐波那契单词的第 n 个字符?
- android - Android Emulator 实例不显示“允许 USB 调试”确认进行身份验证
- database - 无法创建数据库“opensips”;数据库存在
- css - "
- 不允许作为元素的子元素
- 在这种情况下"
- .net-core - EF 迁移忽略数据更改
- javascript - 如何使用 tokenStream 从语法中识别下一个可能的节点?
- python - 使用 Mallet Perplexity 的 Gensim 主题建模
- javascript - 未捕获的类型错误:ajax 中的非法调用
- c# - Wix UIMinimal 对话不显示图像