R 中 data.table 的特定列选择

Specific column selection from data.table in R

我在 R 中有一个 data.table。table 有列名。 我有一个名为 colnames 的向量,其中包含 table.

中的一些列名称
colnames<-c("cost1", "cost2", "cost3")

我想 select 其名称在 table 的向量 colnames 中的列。 table 的名字是 dt.

我已尝试执行以下操作:

selected_columns <- dt[,colnames]

但这不起作用,我得到一个错误。
但是,当我尝试以下操作时,它起作用了:

selected_columns <- dt[,c("cost1", "cost2", "cost3")]

我想使用向量变量 (colnames) 访问列而不是 c("..") 方法。
我该怎么做?

你可以这样试试:

dt[, .SD, .SDcols = colnames]

同时,data.table在最近的版本中给出了另一种选择:

dt[, ..colnames]

另一个不错的选择是利用 select from tidyverse/dplyr universe. select 在从数据框/tibble 或数据 table.

中选择列时为您提供很大的灵活性
library("data.table")
library("tidyverse")
df <- data.table(mtcars)
columns_to_select <- c("cyl", "mpg")
select(df, columns_to_select)

如果您愿意,您也可以跳过引用列名

select(df, c(cyl, mpg))

或利用省略号并传递多个带引号或不带引号的名称

此处,比较多个对象。

objs <- list(select(df, c(cyl, mpg)),
             select(df, cyl, mpg),
             select(df, "cyl", "mpg"))
outer(objs, objs, Vectorize(all.equal))

如果您想走这条路,您可能想进一步了解 dtplyr,它提供了数据 table 和 dplyr 之间的桥梁。