data.table中如何同时保留.SD/.SDcols与非.SD变量的原有名称
解决方案
方法1:用cbind拼接(推荐)
直接在j表达式中用cbind拼接手动选择的列和.SD即可自动保留所有列的原有名称,支持多列选择,无需额外手动命名,也完美兼容patterns匹配规则:
# 选择单个非.SD列 DT[, cbind(a, .SD), .SDcols = x:y] # 选择多个非.SD列 DT[, cbind(a, b, .SD), .SDcols = x:y] # 配合patterns匹配.SD列示例 DT[, cbind(a, .SD), .SDcols = patterns("^[xvy]")]
运行后输出的列名为a, x, v, y,完全保留原始名称。
方法2:显式给手动选择的列命名
如果需要自定义列名,或者偏好使用列表拼接的写法,可以显式给非.SD列指定名称:
DT[, c(a = .(a), .SD), .SDcols = x:y]
输出结果和方法1完全一致。
原写法问题说明
你之前使用c(.(a), .SD)的写法时,.()生成的是无名称列表,第一个元素没有显式命名,data.table会自动分配默认名称V1,只要给手动选择的列补充名称或者用cbind自动继承名称即可解决。
内容的提问来源于stack exchange,提问作者iago
相关产品推荐
相关产品推荐

