df <-
data.frame(a=LETTERS[1:4],
b=rnorm(4)
)
vals <- c("B","D")
我可以過濾/子集df
與值val
與:在R:子集或dplyr ::濾波器具有可變從矢量
dplyr::filter(df, a %in% vals)
subset(df, a %in% vals)
兩者給出:
a b
2 B 0.4481627
4 D 0.2916513
如果什麼我有一個向量中的變量名,例如:
> names(df)[1]
[1] "a"
然後它不工作 - 我猜是因爲它援引
dplyr::filter(df, names(df)[1] %in% vals)
[1] a b
<0 rows> (or 0-length row.names)
你如何做到這一點?
UPDATE(如果dplyr :: tbl_df(DF)是什麼)
回答下面工作的優良data.frames,但不適用於dplyr :: tbl_df包裝的數據:
df<-dplyr::tbl_df(df)
dplyr::filter(df, df[,names(df)[1]] %in% vals)
不不行(我以爲tbl_df
是在DF之上的簡單包裝?)
這不會再工作:
dplyr::filter(df, as.data.frame(df)[,names(df)[1]] %in% vals)
最後更新:它使用lazyeval ::口譯
見AndreyAkinshin的下面的解決方案可與tbl_df()。
@VeerendraGadekar:如下所述,我需要char向量中的變量名。 – user3375672