我想在不同列上使用相同条件来选择行。在多个列上过滤具有相同条件的行
set.seed(123)
df <- data.frame(col.x = sample(LETTERS[1:10], 20, replace = TRUE),
col.y = sample(LETTERS[1:10], 20, replace = TRUE),
val = rnorm(20))
我需要跨两列col.x
,col.y
只有在ValsToRetain
值。
ValsToRetain <- c('A','D', 'F','H','J')
我试过这两种方法给出相同的预期输出。
df %>% filter(col.x %in% ValsToRetain) %>% filter(col.y %in% ValsToRetain)
df %>% filter(col.x %in% ValsToRetain & col.y %in% ValsToRetain)
# col.x col.y val
# 1 A H -1.6866933
# 2 F F 0.8377870
# 3 J J 0.4264642
# 4 F H 0.8781335
# 5 D D -0.3059627
但是,有没有其他优雅的方式来做到这一点?
例如;例如在这些列中计算rowSums
以检查它是否有na
s。由于有多个价值,我无法得到类似的想法,如rowSums(df[,1:2] == 'A')
。
谢谢,这绝对是一个优雅的方式。你看到其他的方法,如果col的名字是'xvar','yvar' ,'valvar'?它是'filter_at(vars('xvar','yvar'),all_vars(。%in%ValsToRetain))'??顺便说一下,你正在使用哪个版本的'dplyr'?我得到一个错误'无法找到函数“filter_at”'。 – Prradep
您可以使用否定版本的变量,即'df%>%filter_at(变量(-val),all_vars(%在%ValsToRetain)中)' – Sotos