从下面的示例中可以看到,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%
调用中使用 any
和 all
,如下所示:
result <- df %>%
mutate(
test = case_when(all(c("a","1") %in% A) ~ "x",
any(c("beta","gamma") %in% B) ~ "y")
)
在这里,我期望 result$test
显示 x
、y
、y
。相反,我得到了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/