如何仅从数据表中选择数字列

时间:2014-08-05 03:01:48

标签: r data.table

为什么这不适用于data.table

适用于data.frame。有没有办法用数据表做到这一点?

x <- data.table(v1=1:20,v2=1:20,v3=1:20,v4=letters[1:20])
y <- x[,sapply(x,is.numeric)]

返回:

v1    v2    v3    v4
TRUE  TRUE  TRUE FALSE

5 个答案:

答案 0 :(得分:16)

没有with = FALSE的另一个解决方案是.SDcols参数:

x[, .SD, .SDcols = which(sapply(x, is.numeric))]

这也有效:

x[, .SD, .SDcols = sapply(x, is.numeric)]

答案 1 :(得分:9)

data.table需要with=FALSE来获取列号。

tokeep <- which(sapply(x,is.numeric))
x[ , tokeep, with=FALSE]

答案 2 :(得分:0)

您也可以尝试:

 x1 <- x[,Filter(is.numeric, .SD)]
 head(x1,3)
 #   v1 v2 v3
#1:  1  1  1
#2:  2  2  2
#3:  3  3  3

虽然,我不得不承认,对于更大的数据集来说,它的速度很慢。

答案 3 :(得分:0)

类似于@akrun的答案

Filter(is.numeric, x)

答案 4 :(得分:0)

我们可以编写一个名为where()的自定义帮助程序,然后我们可以满足一个满足data.frame / data.table where f的问题:

where <- function(x, f) {
  colnames(x)[vapply(x, f, logical(1))]
}

df[, where(df, is.numeric), with = FALSE]