r - 使用 `any` 和 `all` 作为对 `case_when` 内多个元素的逻辑测试?

标签 r dplyr

从下面的示例中可以看到,A 列有多个不同长度的元素。我尝试在 mutate 调用中使用 case_when 来创建“标记”这些多个元素的子集的分类列。

例如,我们创建一个虚拟数据集:

df <- tribble(
  ~A, ~B,
  c("a", "b", "c", "1", "2"), "alpha",
  c("b", "c", "d", "1"), "beta",
  c("c", "d", "1", "2", "3"), "gamma"
)

然后,为了评估子集成员身份,我在 %in% 调用中使用 anyall,如下所示:

result <- df %>%
  mutate(
    test = case_when(all(c("a","1") %in% A) ~ "x",
                     any(c("beta","gamma") %in% B) ~ "y")
  )

在这里,我期望 result$test 显示 xyy。相反,我得到了NA

我的方法可行吗?如果不是,原因是什么?我可以实现的最有效的替代策略是什么?

最佳答案

我想你可能需要rowwise

df %>%
rowwise() %>%
mutate(test = case_when(all(c("a","1") %in% A) ~ "x",
                     any(c("beta","gamma") %in% B) ~ "y"))

这给出了

  A         B     test
  <list>    <chr> <chr>
1 <chr [5]> alpha x
2 <chr [4]> beta  y
3 <chr [5]> gamma y

关于r - 使用 `any` 和 `all` 作为对 `case_when` 内多个元素的逻辑测试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64362653/

相关文章:

r - dplyr top_n() - 抑制状态消息?

r - 从 tibble json 列中提取键值对并将它们取消嵌套到不同的行中

r - 为 aes() 内的 geom_rect 中的填充和颜色指定不同的 alpha?

r - 如何在 ggplot2 中设置 y 轴标签的宽度

r - 如何在ggplot2 map 中绘制geom_line特征?

r - 叠加密度图,ggplot2,R 3.5.1。 , 错误 : Aesthetics must be either length 1 or the same as the data

r - 如何将列表元素提取到 r 中的多个 tibble 列中?

regex - R - 提取所有匹配模式的字符串并创建关系表

r - 如何使用 dplyr 计算第一个出现值的重复次数

r - 在 R 中运行 map reduce 作业时出错