如何使用变量对data.table进行子集化

时间:2017-05-19 22:54:50

标签: r data.table

抓住这个。假设我正在探索汽车数据集

data(mtcars)
test_dt <- as.data.table(mtcars)

我可以使用以下内容轻松地对表进行子集化:

new_dt <- test_dt[cyl == '4', c('disp', 'hp', 'gear')]

我获得了11行数据。现在假设我想创建一个函数,其中我传递列的名称以及过滤器的值进行过滤,这样我就可以创建我想要的任何数据组合。像这样:

foo <- function(colToFilter, filterValue) {
  new_dt <- test_dt[colToFilter == filterValue, c('disp', 'hp', 'gear')]
  return(new_dt)
}

并称之为:

new_dt <- foo('cyl', '4')

该函数不会抛出错误但会返回0行。如何修复我的功能,以便像以前一样返回11行? TIA

1 个答案:

答案 0 :(得分:2)

为了使你的功能有效,它应该是这样的:

foo <- function(colToFilter, filterValue) {
 #you need get in order to 'get' the column named cyl
 new_dt <- test_dt[get(colToFilter) == filterValue, list(disp, hp, gear)]
 return(new_dt)
}

输出:

 > foo('cyl', '4')
     disp  hp gear
 1: 108.0  93    4
 2: 146.7  62    4
 3: 140.8  95    4
 4:  78.7  66    4
 5:  75.7  52    4
 6:  71.1  65    4
 7: 120.1  97    3
 8:  79.0  66    4
 9: 120.3  91    5
10:  95.1 113    5
11: 121.0 109    4