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
相关产品推荐
相关产品推荐

