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=...]
答案 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]