如何在data.table的dcast单聚合函数场景下启用自动列重命名
解决dcast.data.table单个聚合函数自动重命名的问题
这个问题我之前也碰到过,其实解决方法很简单——只要把单个聚合函数放进list()里,就能让dcast自动给列名加上函数后缀,和多聚合函数的行为保持一致!
先看原来的写法(无自动重命名)
当直接传入单个聚合函数时,dcast会直接使用value.var的名字作为列名,不会添加函数后缀:
library(data.table) DT = melt(as.data.table(ChickWeight), id=2:4) # 列名是weight,没有mean后缀 dcast(DT, Time ~ variable, fun=mean)
修改后的写法(启用自动重命名)
把单个聚合函数包裹在list()中,dcast就会自动生成{value.var}_{函数名}格式的列名:
# 自动生成weight_mean这样的列名 dcast(DT, Time ~ variable, fun=list(mean))
进阶:自定义后缀名
如果不想用默认的函数名作为后缀,还可以给list里的函数指定自定义名称,这样列名会变成{value.var}_{自定义名称}:
# 列名会变成weight_average dcast(DT, Time ~ variable, fun=list(average = mean))
原理其实很简单:dcast的fun参数识别到传入的是一个列表(哪怕只有一个元素)时,就会触发自动命名逻辑,给每个聚合结果列添加对应的后缀,和多函数场景的处理逻辑对齐。
内容的提问来源于stack exchange,提问作者Dirk
相关产品推荐
相关产品推荐

