假设你有一个这样的data.frame:
x <- data.frame(v1=1:20,v2=1:20,v3=1:20,v4=letters[1:20])
如何只选择x中的那些数字列?
发布于 2011-05-03 06:28:37
编辑:已更新,以避免使用不明智的sapply
。
因为数据框是一个列表,所以我们可以使用列表应用函数:
nums <- unlist(lapply(x, is.numeric))
然后进行标准子设置
x[ , nums]
## don't use sapply, even though it's less code
## nums <- sapply(x, is.numeric)
对于一个更地道的现代R,我现在推荐
x[ , purrr::map_lgl(x, is.numeric)]
更少的codey,更少地反映R的特殊怪癖,更直接,更健壮地用于数据库后端的琐碎:
dplyr::select_if(x, is.numeric)
较新版本的dplyr还支持以下语法:
x %>% dplyr::select(where(is.numeric))
发布于 2016-11-26 00:08:17
dplyr包的select_if(
)函数是一个优雅的解决方案:
library("dplyr")
select_if(x, is.numeric)
发布于 2016-11-09 18:31:48
基础包中的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倍)。
https://stackoverflow.com/questions/5863097
复制相似问题