创建一个循环数据表变量并添加计数的函数

时间:2014-07-04 13:54:53

标签: r data.table

我想创建一个函数,在数据表中插入新列,并将列表中每个变量的计数作为参数给出。

这是一个有效的代码,但它不是一个函数:

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

1 个答案:

答案 0 :(得分: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"))