2014-07-04 70 views
1

我想創建一個函數,將新列插入數據表中,並將列表中每個變量的計數作爲參數給出。創建一個函數來遍歷數據表變量並添加計數

這裏是一個工作的代碼,但它不是一個函數:

a = data.table(x=c(1,2,3,3,1), y=c(3,4,4,23,3)) 
setkey(a, "x", "y") 
a[,x_cnt := .N, by=list(x)] 
a[,y_cnt := .N, by=list(y)] 
> a 
    x y x_cnt y_cnt 
1: 1 3  2  2 
2: 1 3  2  2 
3: 2 4  1  2 
4: 3 4  2  2 
5: 3 23  2  1 

這是到目前爲止我的代碼:

a = data.table(x=c(1,2,3,3,1), y=c(3,4,4,23,3)) 
my.f1cnt <- function(ds, variable_list) 
{ 
    for(var in variable_list) 
    { 
     setkey(ds, var) 
     ds[,paste0(var, "_cnt") := .N, by=list(var)] 
    } 
    #return 
    ds 
} 

my.f1cnt(a, c("x","y")) 
Error in setkeyv(x, cols, verbose = verbose) : 
    some columns are not in the data.table: var 

回答

0

它與setkeyv:

my.f1cnt <- function(ds, variable_list) 
{ 
    for(var in variable_list) 
    { 
     setkeyv(ds, var) 
     ds[,paste0(var, "_cnt") := .N, by=var] 
    } 
    #return 
    ds 
} 
a = data.table(x=c(1,2,3,3,1), y=c(3,4,4,23,3)) 
my.f1cnt(a, c("x","y")) 
+0

注根本不需要'setkey(v)'來進行聚合(通常速度更快)。 – Arun

相關問題