能否对仅含id和value列的data.table使用dcast实现宽表转换
你要的效果可以直接通过dcast配合data.table内置的rowid()函数实现,无需提前在原表中新增变量列,计算过程完全在dcast内部完成,额外开销极低:
# 沿用你处理后仅保留id、value两列的dt library(data.table) dt <- data.table(id = c(1, 2, 1), value = c(100, 200, 300)) # 直接执行dcast,无需新增额外列 dt_wide <- dcast(dt, id ~ rowid(id, prefix = "V"), value.var = "value") dt_wide #> id V1 V2 #> 1: 1 100 300 #> 2: 2 200 NA
上述代码的输出和你期望的结果完全一致。
原理说明
rowid(id)是data.table内置的高性能函数,会对每个id分组内的行按出现顺序生成1、2、3的自增序号,直接作为宽表转换时的列名依据,不需要将该序列持久化保存到原表中- 加
prefix = "V"参数即可自动生成V1/V2这类符合你预期的列名,无需额外调整 - 整个过程没有额外的列添加开销,性能远高于先新增variable列再转换的方案
内容的提问来源于stack exchange,提问作者gss
相关产品推荐
相关产品推荐

