首页 文章

如何使用某些列名的字符向量在data.table中选择列? [重复]

提问于
浏览
19

这个问题在这里已有答案:

我试图在data.table中选择那些名称出现在我的角色向量中的列 . 该操作在纯data.frame中工作,但在data.table中不起作用 . 这是一个可重复的例子 .

> names(mtcars)
 [1] "mpg"  "cyl"  "disp" "hp"   "drat" "wt"   "qsec" "vs"   "am"   "gear"
[11] "carb"
> myVector <- c('disp', 'hp', 'wt')
> head(mtcars[, myVector])
                  disp  hp    wt
Mazda RX4          160 110 2.620
Mazda RX4 Wag      160 110 2.875
Datsun 710         108  93 2.320
Hornet 4 Drive     258 110 3.215
Hornet Sportabout  360 175 3.440
Valiant            225 105 3.460

我刚刚创建了一个包含 disphpwt 的向量,并使用该向量在我的data.frame中选择了相应的列 . 现在让我们从data.frame中创建一个data.table对象,并尝试执行相同的操作 .

> library(data.table)
> mtcarsDT <- data.table(mtcars)
> mtcarsDT[, myVector]
[1] "disp" "hp"   "wt"

1 回答

  • 27

    我们可以使用 with=FALSE 执行与 data.frame 相同的操作

    mtcarsDT[, myVector, with=FALSE]
    

    根据 ?data.table

    with:默认情况下,'with = TRUE'和'j'在'x'的框架内进行评估;列名可以用作变量 . 当'with = FALSE''j'是列名的字符向量或要选择的列位置的数字向量时,返回的值总是'data.table' . 'with = FALSE'在'data.table'中通常很有用,可以动态选择列 .

相关问题