为在`by`创建的data.table子集上执行的操作提供函数参数

n1k*_*1t4 1 arguments r data.table

R中的数据表有三个(主要)组件:DT[i, j, by].

我正在使用函数创建我的data.table DT的子集,该by函数返回我的数据的子集j,在那里我可以对它们执行操作.我在每个新子集中,我可以指定我想要使用的列j.

文档(稍微改变我):

DT[, lapply(.SD, mean), by=., .SDcols=...] - 将fun(= mean)应用于.SDcols中指定的所有列,同时按by中指定的列进行分组.

这是很棒的功能!

我想知道是否可以为正在使用的函数提供参数j- 在这种情况下:mean

该功能mean可以采取以下输入:

mean(x, trim = 0, na.rm = FALSE, ...)
Run Code Online (Sandbox Code Playgroud)

例如,我如何meanj部分申请中使用na.rm = TRUE


在旁注中,我确实遇到了关于Reduce 函数的类似问题,它将函数递归地应用于数据集.我发现的最好的想法是创建要应用的函数的自定义版本,所以类似于:

my_mean <- function(Data) {

    output <- mean(Data, na.rm = TRUE)

    return(output)
}
Run Code Online (Sandbox Code Playgroud)

然后使用上面的例子,我会执行:

DT[, lapply(.SD, my_mean), by=., .SDcols=...]
Run Code Online (Sandbox Code Playgroud)

Pek*_*kka 5

你可以将额外的参数传递给lapply:

DT = data.table(x=c(1,2,3,4,NA),y=runif(5),z=c(1,1,1,2,2))
DT[, lapply(.SD, mean,na.rm=T), by=z]
Run Code Online (Sandbox Code Playgroud)