You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

R语言data.table聚合时结合.SD与其他列结果异常如何解决

问题原因

你原来的写法错误是因为list(sum(cyl), lapply(.SD, mean))返回的是两层结构的列表:第一层有2个元素,第一个是长度为1的sum(cyl)结果,第二个是长度为2的.SD列均值列表。data.table解析时会自动对短元素进行循环补齐,最终生成2行的结果。

解决方法

直接用c()将单独统计的列和.SD批量计算的结果拼接为同一个一维列表即可,修改后代码如下:

library(data.table)
t <- as.data.table(mtcars)
# 拼接两个列表作为输出
res <- t[, c(list(cyl = sum(cyl)), lapply(.SD, mean)), .SDcols = c('mpg', 'disp')]

运行后res的结构就是你期望的1行3列data.table,三列分别为cyl求和结果、mpg均值、disp均值。

注意:单独计算的统计量必须放在list()内部,才能和lapply返回的列表结构正确拼接,否则会出现类型转换错误。

其他等价写法

如果习惯用data.table的简写语法,也可以写成:

res <- t[, .(cyl = sum(cyl)) + lapply(.SD, mean), .SDcols = c('mpg', 'disp')]

这里的+运算符在data.table的j参数中会自动执行列表拼接,和c()效果一致。

内容的提问来源于stack exchange,提问作者Kyouma

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 12:18:00