繁体   English   中英

如何使用多个 OR 语句过滤 R? Dplyr

[英]How to filter in R using multiple OR statments? Dplyr

我尝试搜索此内容,但找不到我需要的内容。

这就是我的数据的样子,

mydata <- data.frame(Chronic = c("Yes", "No", "Yes"),
                      Mental = c("No", "No", "No"),
                      SA = c("No", "No", "Yes"))

> mydata
  Chronic Mental  SA
1     Yes     No  No
2      No     No  No
3     Yes     No Yes

我的目标是获取任何列等于是的行数。 在这种情况下,第 1 行和第 3 行至少有一个是。 其中第 2 行只有 No

有没有容易做到这一点?

我们可以在逻辑matrix上使用rowSums ,然后得到逻辑向量的sum ,以返回至少有一个“是”的行数

sum(rowSums(mydata == 'Yes') > 0)
#[1] 2

或者使用tidyverse

library(dplyr)
mydata %>% 
   rowwise %>%
   mutate(Count = + any(c_across(everything()) == 'Yes')) %>%
   ungroup %>% 
   pull(Count) %>%
   sum
#[1] 2

如果你想写出代码(而不是使用cross),你可以使用case_when写出代码:

mydata %>% 
  mutate(yes_column = case_when(Chronic == 'Yes' | Mental == 'Yes' | SA == 'Yes' ~ 1,
                                TRUE ~ 0)) %>% 
  summarise(total = sum(yes_column))

如果 Yes 出现在任何列中,这将创建一个二进制标志。 这对于查看每一列的代码是否正常工作非常有用,特别是发现是否存在诸如“是”或“是”甚至“是”之类的数据质量问题。 该| 表示 OR,您可以使用 & 表示 AND。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM