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

R语言data.table列选择异常:合并列名向量未达预期结果

问题场景

在R语言中,base2c和MedSurgc是存储待选列名的向量,具体内容如下:

> base2c
[1] "ID"   "YEAR" "SEX"  "AGE" 
> MedSurgc
 [1] "LW_OC"     "LW_OC_DUR" "LW_OC_YY"  "LW_OC_MM"  "LW_WH"     "LW_WH_A"   "LW_WH_DUR" "LW_WH_YY"  "LW_WH_MM" 
[10] "LW_OV"     "LW_OV_A"

执行代码 MedSurg <- DT[ , .(c(base2c, MedSurgc))] 时未得到预期结果,请问问题出在哪里?

问题原因与修正方案
  • 核心问题:你用.()(等价于list())包裹了合并后的列名向量,这会把整个字符向量当成单个列表元素,最终得到的是一列包含所有列名字符串的数据表,而不是提取原数据表中对应列的结果。
  • 正确写法1(最直接):直接将合并后的列名向量作为索引传入,不需要用.()包裹:
MedSurg <- DT[ , c(base2c, MedSurgc)]
  • 正确写法2(data.table风格):使用..前缀指代外部环境中的向量,避免与数据表内的列名冲突:
MedSurg <- DT[ , ..c(base2c, MedSurgc)]
  • 正确写法3(用.SDcols参数):通过.SDcols指定要选择的列,再提取.SD(即所选列的子集):
MedSurg <- DT[ , .SD, .SDcols = c(base2c, MedSurgc)]

内容的提问来源于stack exchange,提问作者D. Shin

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 23:19:50