我想根据多个变量的条件创建一个布尔变量。如第二个答案所示这个问题 https://stackoverflow.com/questions/28233561/finding-rows-containing-a-value-or-values-in-any-column,可以根据多列中的多种条件进行过滤:
mtcars %>% filter_at(vars(starts_with("d"),starts_with("c")), any_vars(. %in% c(4)))
我想做类似的事情
test <- mtcars %>% mutate(has.4 = any_vars(vars(starts_with("d"),starts_with("c")) %in% c(4)))
但这当然不起作用并给出Error: Column ``has.4`` is of unsupported type quoted call
.
The filter_at()
调用已经创建了用于对数据进行子集化的布尔值。如何将该输出传输到新变量中并保留所有行?
另外,我只想创建一个新列,所以mutate_at()
and mutate_if()
似乎不是正确的选择。
而不是starts_with
,这里的一个选项是matches
library(dplyr)
out1 <- mtcars %>%
filter_at(vars(matches('^(d|c)')), any_vars(. %in% 4))
如果我们需要一列,我们可以使用以下命令创建条件rowSums
out2 <- mtcars %>%
mutate(has.4 = rowSums(select(., matches("^(d|c)")) == 4) > 0)
identical(out1, out2 %>%
filter(has.4) %>%
select(-has.4))
#[1] TRUE
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)