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

能否对仅含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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 16:54:01