假设,你有一个这样的data.frame:
x <- data.frame(v1=1:20,v2=1:20,v3=1:20,v4=letters[1:20])
如何只选择x中的数字列呢?
假设,你有一个这样的data.frame:
x <- data.frame(v1=1:20,v2=1:20,v3=1:20,v4=letters[1:20])
如何只选择x中的数字列呢?
当前回答
另一种方法可能如下:-
#extracting numeric columns from iris datset
(iris[sapply(iris, is.numeric)])
其他回答
这是其他答案的替代代码:
x[, sapply(x, class) == "numeric"]
用一个数据表
x[, lapply(x, is.numeric) == TRUE, with = FALSE]
dplyr包的select_if()函数是一个优雅的解决方案:
library("dplyr")
select_if(x, is.numeric)
另一种方法可能如下:-
#extracting numeric columns from iris datset
(iris[sapply(iris, is.numeric)])
来自基本包的Filter()是该用例的完美函数: 你只需要编写代码:
Filter(is.numeric, x)
它也比select_if()快得多:
library(microbenchmark)
microbenchmark(
dplyr::select_if(mtcars, is.numeric),
Filter(is.numeric, mtcars)
)
Filter返回(在我的计算机上)中值为60微秒,select_if返回21 000微秒(快350倍)。
如果你有很多因子变量,你可以使用select_if函数。 安装dplyr包。有许多函数通过满足一个条件来分离数据。你可以设置条件。
像这样使用。
categorical<-select_if(df,is.factor)
str(categorical)