考虑数据数据表
DT1 = as.data.table(data.frame(col1 = c(1,2,3,2,5,1,3,3,1,2), col2 = c(3,4,5,4,3,4,5,3,4,5), col3 = c(1,2,3,4,5,6,7,8,9,10)))
我想从变量中对它进行切片。
所以
DT1[, c("col1", "col3")]
可以正常工作。 如何从存储在变量中的列名称中切片。
col_name1 <- "col1"
col_name2 <- "col3"
我尝试过get
,但是没有运气。
DT1[, c(get(col_name1), "col2")]
>[1] "1" "2" "3" "2" "5" "1" "3" "3" "1" "2" "col2"
DT1[, get(c(col_name1, "col2"))]
>[1] 1 2 3 2 5 1 3 3 1 2
DT1[, get(c(col_name1, col_name2))]
>[1] 1 2 3 2 5 1 3 3 1 2
DT1[, c(get(col_name1), get(col_name2))]
>[1] 1 2 3 2 5 1 3 3 1 2 1 2 3 4 5 6 7 8 9 10
有什么主意吗?在讨论过程中,您还能帮我解释一下我尝试的方法未成功背后的逻辑吗?谢谢。
答案 0 :(得分:3)
将.SD
与.SDcols
一起使用
DT1[, .SD, .SDcols = c(col_name1, col_name2)]
# col1 col3
# 1: 1 1
# 2: 2 2
# 3: 3 3
# 4: 2 4
# 5: 5 5
# 6: 1 6
# 7: 3 7
# 8: 3 8
# 9: 1 9
#10: 2 10
或(提供的data.table
版本> 1.10.2
)
DT1[, c(..col_name1, ..col_name2)]
或
DT1[, c(col_name1, col_name2), with = F]
但是请注意,最后一个选项将正式为deprecated in the next few years,而应使用..
前缀版本。