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

data.table分组时如何保留原列名(含变量指定列名场景)

在data.table中分组时保留原列名的解决方案

直接使用列名分组(带函数处理)

当你需要对列应用factor()这类函数后再分组,同时保留原列名时,不要直接把函数写在by参数里,而是用命名列表的形式指定分组列名:

library(data.table)

dt <- data.table(value=rnorm(100), class=sample(1:3, 100, replace=TRUE))

# 显式指定分组列名为原列名class
dt[, .(class_mean=mean(value)), by=.(class = factor(class))]

这段代码的输出分组列名就是class,而非factor。

通过变量指定列名分组

当用变量存储列名时,有两种简洁的方式实现保留原列名的需求:

方法1:利用非标准求值!!配合:=

这是data.table推荐的写法,通过!!强制解析变量的实际值作为列名:

var_name <- "class"
dt[, .(class_mean=mean(value)), by=.(!!var_name := factor(get(var_name)))]

方法2:用setNames构造命名列表

通过setNames给分组列指定原列名:

var_name <- "class"
dt[, .(class_mean=mean(value)), by=setNames(list(factor(get(var_name))), var_name)]

两种方法都能让结果中的分组列名保持为class,而不是变量名var_name。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 03:13:23