2017-06-02 88 views
0

我正在使用data.table,我想過濾一個函數中的data.table,我將該列的名稱作爲字符向量傳遞。引用通過data.table中的字符變量的列R

舉個簡單重複的例子,讓我們基地R.的mtcars數據集

我可以用data.table語法寫:

mtcars[am == 1, .N ] 

但是,如果感興趣的變量的名稱 - 即am - 被存儲爲一個字符向量,即「am」?

您的建議將不勝感激。

+2

'DT = data.table (mtcars); vname =「am」; DT [。(1),on = vname,.N]'是我所要做的。 – Frank

回答

2

一種選擇是使用get得到按照名字搜索對象?):

mtcars[get('am') == 1, .N] 
# [1] 13 
0

另一種選擇是在.SDcols

mtcars[, sum(.SD==1) ,.SDcols = 'am'] 
#[1] 13 

指定它我們也可以包括多個變量

mtcars[, sum(Reduce(`&`, lapply(.SD, `==`, 1))), .SDcols = c('am', 'carb')] 
#[1] 4