R 如果所有列均为“是”,则汇总“是”

Ada*_*dam 0 r dplyr

我有一个如下所示的数据集:

data <- data.frame(Subject = c("A","B","C"),
          Col1 = c("Yes", "Yes", "No"),
          Col2 = c("Yes", "Yes", "Yes"),
          Col3 = c("Yes", "Yes", "Yes")
                   )

print(data)

 Subject Col1 Col2 Col3
1       A  Yes  Yes  Yes
2       B  Yes  Yes  Yes
3       C   No  Yes  Yes
Run Code Online (Sandbox Code Playgroud)

我想总结是否所有列都等于“是”。如果是,则新列为“是”,如果其中一列为NA“否”,则摘要列为“否”。

我当前的代码看起来像这样,但我觉得有一个更简单的方法:

data %>%
group_by(Subject) %>%
summarize(Summary = case_when(
    Col1 == "Yes & Col2 == "Yes & Col3 == "Yes ~ "Yes",
    Col1 != "Yes & Col2 != "Yes & Col3 != "Yes ~ "No",
    TRUE ~ NA
Run Code Online (Sandbox Code Playgroud)

akr*_*run 5

我们可以使用if_all/if_any

library(dplyr)
data %>% 
 mutate(Summary = case_when(if_all(starts_with("Col"), 
     ~. == "Yes") ~ "Yes", TRUE ~ "No"))
Run Code Online (Sandbox Code Playgroud)

-输出

 Subject Col1 Col2 Col3 Summary
1       A  Yes  Yes  Yes     Yes
2       B  Yes  Yes  Yes     Yes
3       C   No  Yes  Yes      No
Run Code Online (Sandbox Code Playgroud)

  • 很好地使用了“if_all”,我还没有将它们融入到我的日常习惯中。 (2认同)