我有一个如下所示的数据集:
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)
我们可以使用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)