如何在R的data.table中筛选名称为整数的列?
data.table筛选整数名称列的解决办法
先看你的示例数据:
dd <- data.table(a= 1:3, `1990` = 4:6, `1991` = 7:9, `1992` = 10:12)
你提到在data.frame里用dd[,as.character(1990:1992)]能直接筛选出名称为1990-1992的列,但这套写法在data.table里失效,dd[,.(1990:1992)]也不行,这里给你几个贴近data.frame思路的解决方案:
1. 使用with=FALSE参数(最贴近data.frame写法)
data.table默认会把方括号内的j表达式当成数据内部的变量处理,加上with=FALSE后,就会和data.frame一样,把括号里的内容当作列名索引来解析:
dd[, as.character(1990:1992), with = FALSE]
2. 使用..前缀引用列名向量
..是data.table的特殊语法,代表"从上层环境引用变量",可以直接把列名向量传给它:
# 先定义列名向量再引用 cols <- as.character(1990:1992) dd[, ..cols] # 也可以直接内联写法 dd[, ..(as.character(1990:1992))]
3. 使用.SDcols参数
通过.SDcols指定要保留的列,再返回.SD(即筛选后的数据集),新版本的data.table也支持直接省略.SD:
# 完整写法 dd[, .SD, .SDcols = as.character(1990:1992)] # 简化写法(data.table 1.14.0+支持) dd[, .SDcols = as.character(1990:1992)]
内容的提问来源于stack exchange,提问作者user436994
相关产品推荐
相关产品推荐

