指定された変数が含まれる場合と含まれない場合があるさまざまなデータフレームで実行されるヘルパー関数(たとえば、foo()
)があります。私が持っているとしましょう
_library(dplyr)
d1 <- data_frame(taxon=1,model=2,z=3)
d2 <- data_frame(taxon=2,pss=4,z=3)
_
選択したい変数は
_vars <- intersect(names(data),c("taxon","model","z"))
_
つまり、foo(d1)
がtaxon
、model
、およびz
列を返し、foo(d2)
がちょうどを返すようにしたいのです。 taxon
およびz
。
foo
にselect(data,c(taxon,model,z))
が含まれている場合、foo(d2)
は失敗します(_d2
_にmodel
が含まれていないため)。 select(data,-pss)
を使用すると、foo(d1)
も同様に失敗します。
Tidyverseから撤退した場合(_data[vars]
_を返すだけ)にこれを行う方法は知っていますが、(1)select()
ヘルパーを使用してこれを行う便利な方法があるかどうか疑問に思っています。ある種の(_tidyselect::select_helpers
_)または(2)tidyevalを使用(これはまだ頭を動かす時間がありません!)
別のオプションはselect_if
:
d2 %>% select_if(names(.) %in% c('taxon', 'model', 'z'))
# # A tibble: 1 x 2
# taxon z
# <dbl> <dbl>
# 1 2 3
one_of()
を使用できます。これは、列が存在しない場合に警告を表示しますが、それ以外の場合は正しい列を選択します。
d1 %>%
select(one_of(c("taxon", "model", "z")))
d2 %>%
select(one_of(c("taxon", "model", "z")))
組み込みのanscombe
データフレームを使用して、z
がanscombe
の列ではないことに注意してください。
anscombe %>% select(intersect(names(.), c("x1", "y1", "z")))
与える:
x1 y1
1 10 8.04
2 8 6.95
3 13 7.58
4 9 8.81
5 11 8.33
6 14 9.96
7 6 7.24
8 4 4.26
9 12 10.84
10 7 4.82
11 5 5.68