从数据框列表中选择仅包含数字列的数据框。

3

我有以下的数据框列表:

library(carData)
library(datasets)
l = list(Salaries,iris)

我只想在这个数据集列表中选择数字列。已经尝试使用带有函数select_if(is.numeric)lapply,但它对我没有用。
2个回答

4

使用lapply两次来设置R选项的基础方法如下:

library(carData)
library(datasets)

l = list(Salaries,iris)
lapply(l, \(x) x[, unlist(lapply(x, is.numeric), use.names = FALSE)])
#> [[1]]
#>     yrs.since.phd yrs.service salary
#> 1              19          18 139750
#> 2              20          16 173200
#> 3               4           3  79750
#> 4              45          39 115000
#> 5              40          41 141500
#> 
#> [[2]]
#>     Sepal.Length Sepal.Width Petal.Length Petal.Width
#> 1            5.1         3.5          1.4         0.2
#> 2            4.9         3.0          1.4         0.2
#> 3            4.7         3.2          1.3         0.2
#> 4            4.6         3.1          1.5         0.2
#> 5            5.0         3.6          1.4         0.2

使用 reprex v2.0.2 工具于 2022 年 9 月 25 日创建


1
也许 lapply(l, \(x) x[sapply(x, is.numeric)]) 更加简洁。 - jay.sf

2
我们可以在更新版本的dplyr中使用带有where的select - 使用map遍历列表并选择数据框的列。
library(purrr)
library(dplyr)
map(l, ~ .x %>%
    select(where(is.numeric)))

或者使用 基础 R

lapply(l, Filter, f = is.numeric)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接