我想创建一个函数,在数据表中插入新列,并将列表中每个变量的计数作为参数给出。
这是一个有效的代码,但它不是一个函数:
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 :(得分: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"))