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

时间:2016-02-03 21:19:21

标签: r arguments data.table

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

我正在使用by功能创建我的data.table DT 的子集,该功能将我的数据子集返回到j,我可以在其中执行操作。在每个新子集中,我可以在j中指定要使用的列。

来自the documentation(稍微改变一下):

  

DT[, lapply(.SD, mean), by=., .SDcols=...] - 将乐趣(=均值)应用于所有人   在按指定的列分组时在.SDcols中指定的列   in by。

这是很棒的功能!

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

函数mean可以采用以下输入:

mean(x, trim = 0, na.rm = FALSE, ...)

如何在mean部分部分中使用j,例如na.rm = TRUE

另一方面,我对Reduce确实有类似的问题 函数,它将函数递归地应用于数据集。我发现的最好的想法是创建要应用的函数的自定义版本,例如:

my_mean <- function(Data) {

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

    return(output)
}

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

DT[, lapply(.SD, my_mean), by=., .SDcols=...]

1 个答案:

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