同じ条件で異なる列を使用して行を選択したいとします。複数の列で同じ条件の行をフィルタリングする
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))
は、私は2つの列col.x
、col.y
渡っValsToRetain
で値だけを持っている必要があります。
ValsToRetain <- c('A','D', 'F','H','J')
私は、同じ期待される出力を与えるこれら2つのアプローチを試しました。
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
があるかどうかを確認します。複数の価値があるので、私はrowSums(df[,1:2] == 'A')
のような考えを得ることができませんでした。
ありがとう、それは間違いなくそれを行うエレガントな方法です。 col名が 'xvar'、' yvar'だったら他の方法がありますか 、 'valvar'?それは 'filter_at(vars( 'xvar'、 'yvar')、all_vars(%は%ValsToRetain)です)' ?? Btw、 'dplyr'のどのバージョンを使用していますか? '関数を見つけることができませんでした 'というエラーが表示されます。filter_at" ' – Prradep
これは、varsの否定版、すなわち 'df%>%filter_at(vars(-val)、all_vars(%in%ValsToRetain))' – Sotos