【问题标题】:Supplying function arguments for operations performed on data.table subsets created by `by`为对由`by`创建的data.table子集执行的操作提供函数参数
【发布时间】:2016-05-13 07:00:15
【问题描述】:

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

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

来自the documentation(我略有改动):

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

这是很棒的功能!

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

函数mean可以接受以下输入:

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

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


顺便说一句,我确实遇到了关于Reduce 的类似问题 函数,它将函数递归地应用于数据集。我发现的最佳想法是创建要应用的函数的自定义版本,例如:

my_mean <- function(Data) {

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

    return(output)
}

然后使用上面的示例,我将执行:

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

【问题讨论】:

    标签: r arguments data.table


    【解决方案1】:

    您可以将额外的参数传递给 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]
    

    【讨论】:

    • 值得注意的是,这与data.table无关;见?lapply
    • 它与Reduce 的工作方式类似,发送by 定义的每个组中的值。
    猜你喜欢
    • 2020-11-23
    • 2018-04-20
    • 1970-01-01
    • 2021-04-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-08
    • 1970-01-01
    相关资源
    最近更新 更多