2014-09-30 108 views
1

我正在使用data.table在一列中獲取一些基本統計信息,同時按另一列進行過濾。data.table&列名稱

這是命令

stats <- as.data.frame(mydata[, j = list(Sum = sum(as.numeric(get(selection))), 
             Average = mean(as.numeric(get(selection))), 
             Count = length(get(selection))), 
           by = list(get(filters))]) 

其中:

  • MYDATA是data.table與20分左右的列
  • 選擇是被編程
  • 濾器列名也是以編程方式傳遞的列名稱

如果我將自己限制爲一個過濾器(一列),一切正常,但我想過濾多個列。

這是可以做到:

by = list(get(filters[1]), get(filters[2]), ...) 

但是,需要知道有多少的過濾器將被使用。這是我不想擁有的限制。

我該如何編寫by =獲取任意數量的過濾器(列名稱) - 我只是試過mget(過濾器),這是行不通的。

謝謝!

卡洛斯

回答

5

Data.tables by參數接受的列名的字符向量(參見文檔:help("data.table"))。沒有必要爲get。只需使用by = c(filters)

例子:

library(data.table) 
DT <- data.table(mtcars) 

filters <- c("am", "gear") 
DT[, mean(mpg), by=c(filters)] 
# am gear  V1 
#1: 1 4 26.27500 
#2: 0 3 16.10667 
#3: 0 4 21.05000 
#4: 1 5 21.38000 
+0

我知道它是什麼傻......多謝你! – Carlos 2014-09-30 15:17:55