首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >仅从数据框中选择数字列

仅从数据框中选择数字列
EN

Stack Overflow用户
提问于 2011-05-03 06:19:03
回答 12查看 248.6K关注 0票数 215

假设你有一个这样的data.frame:

代码语言:javascript
复制
x <- data.frame(v1=1:20,v2=1:20,v3=1:20,v4=letters[1:20])

如何只选择x中的那些数字列?

EN

回答 12

Stack Overflow用户

回答已采纳

发布于 2011-05-03 06:28:37

编辑:已更新,以避免使用不明智的sapply

因为数据框是一个列表,所以我们可以使用列表应用函数:

代码语言:javascript
复制
nums <- unlist(lapply(x, is.numeric))  

然后进行标准子设置

代码语言:javascript
复制
x[ , nums]

## don't use sapply, even though it's less code
## nums <- sapply(x, is.numeric)

对于一个更地道的现代R,我现在推荐

代码语言:javascript
复制
x[ , purrr::map_lgl(x, is.numeric)]

更少的codey,更少地反映R的特殊怪癖,更直接,更健壮地用于数据库后端的琐碎:

代码语言:javascript
复制
dplyr::select_if(x, is.numeric)

较新版本的dplyr还支持以下语法:

代码语言:javascript
复制
x %>% dplyr::select(where(is.numeric))
票数 337
EN

Stack Overflow用户

发布于 2016-11-26 00:08:17

dplyr包的select_if()函数是一个优雅的解决方案:

代码语言:javascript
复制
library("dplyr")
select_if(x, is.numeric)
票数 90
EN

Stack Overflow用户

发布于 2016-11-09 18:31:48

基础包中的Filter()是该用例的完美函数:您只需编写代码:

代码语言:javascript
复制
Filter(is.numeric, x)

它也比select_if()快得多

代码语言:javascript
复制
library(microbenchmark)
microbenchmark(
    dplyr::select_if(mtcars, is.numeric),
    Filter(is.numeric, mtcars)
)

(在我的电脑上)返回Filter的中位数为60微秒,返回select_if的中位数为21 000微秒(快350倍)。

票数 51
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5863097

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档