如何解决多列R dplyr过滤器字符串条件
我有一个df,例如
df <-read.table(text="
v1 v2 v3 v4 v5
1 A B X C
2 A B C X
3 A C C C
4 B D V A
5 B Z Z D",header=T)
如何将变量v2过滤到v5(如果变量中带有“ X”)。我已经看到了一些使用filter的示例,但它们似乎仅适用于数字条件。
filter_at(vars(contains("prefix")),all_vars(.>5))
将“ X”替换为> 5无效
解决方法
使用 dplyr
1.0.4,我们可以使用 if_any
library(dplyr)
df %>%
filter(if_any(v2:v5,~ . == 'X'))
# v1 v2 v3 v4 v5
#1 1 A B X C
#2 2 A B C X
,
您可以将filter_at
与any_vars
一起使用,以选择至少具有一个值"X"
的行。
library(dplyr)
df %>% filter_at(vars(v2:v5),any_vars(. == 'X'))
# v1 v2 v3 v4 v5
#1 1 A B X C
#2 2 A B C X
但是,filter_at
已被替换为超级种子,因此您可以将其翻译为across
:
df %>% filter(Reduce(`|`,across(v2:v5,~. == 'X')))
在基数R中也更容易:
df[rowSums(df[-1] == 'X') > 0,]
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。