我正在寻找一种基于向量对 data.tables 进行子集化的有效方法。

这不起作用:

library(data.table)
z <- data.table(mtcars)
ids <- z[wt > 3.5, "mpg"]
z[mpg %in% ids, ]

我希望它能够工作 - 基于 data.frames 的这种行为。
ids2 <- mtcars[mtcars$wt > 3.5, "mpg"]
mtcars[mtcars$mpg %in% ids2, ]

如果我只是输入数字,它会起作用:
z[ mpg %in% c( 14.3 , 10.4) , ]

我试过转换类:
subset(z, mpg %in% ids)
subset(z, as.numeric (mpg) %in% as.numeric( ids))
subset(z, as.character(mpg) %in% as.character( ids ))

最佳答案

z[wt > 3.5, "mpg"] 会给你一个 data.table,你需要取消引用 mpg 来获得一个向量:

ids <- z[wt > 3.5, mpg]
z[mpg %in% ids]

这使:



或者,您也可以利用 data.table 的功能来设置键:
z <- data.table(mtcars, key = 'mpg')
ids <- z[wt > 3.5, unique(mpg)]
z[.(ids)]

关于r - 使用索引对 data.table 中的行进行子集,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50412662/

10-12 19:52