我正在尝试根据其中一列的平均值过滤数据框列表。以以下示例为例:
# creating df1
df1 <- as_tibble(mtcars)
# creating df2
df2 <- as_tibble(iris)
# creating list of df (df_list)
df_list <- list(mtcars,iris)
# Checking the structure of the list
str(df_list)
List of 2
$ : tibble [32 × 11] (S3: tbl_df/tbl/data.frame)
..$ mpg : num [1:32] 21 21 22.8 21.4 18.7 18.1 14.3 24.4 22.8 19.2 ...
..$ cyl : num [1:32] 6 6 4 6 8 6 8 4 4 6 ...
..$ disp: num [1:32] 160 160 108 258 360 ...
..$ hp : num [1:32] 110 110 93 110 175 105 245 62 95 123 ...
..$ drat: num [1:32] 3.9 3.9 3.85 3.08 3.15 2.76 3.21 3.69 3.92 3.92 ...
..$ wt : num [1:32] 2.62 2.88 2.32 3.21 3.44 ...
..$ qsec: num [1:32] 16.5 17 18.6 19.4 17 ...
..$ vs : num [1:32] 0 0 1 1 0 1 0 1 1 1 ...
..$ am : num [1:32] 1 1 1 0 0 0 0 0 0 0 ...
..$ gear: num [1:32] 4 4 4 3 3 3 3 4 4 4 ...
..$ carb: num [1:32] 4 4 1 1 2 1 4 2 2 4 ...
$ : tibble [150 × 5] (S3: tbl_df/tbl/data.frame)
..$ Sepal.Length: num [1:150] 5.1 4.9 4.7 4.6 5 5.4 4.6 5 4.4 4.9 ...
..$ Sepal.Width : num [1:150] 3.5 3 3.2 3.1 3.6 3.9 3.4 3.4 2.9 3.1 ...
..$ Petal.Length: num [1:150] 1.4 1.4 1.3 1.5 1.4 1.7 1.4 1.5 1.4 1.5 ...
..$ Petal.Width : num [1:150] 0.2 0.2 0.2 0.2 0.2 0.4 0.3 0.2 0.2 0.1 ...
..$ Species : Factor w/ 3 levels "setosa","versicolor",..: 1 1 1 1 1 1 1 1 1 1 ...
我想获得每个df(在此示例中为
disp
和Petal.Lenght
)的第3列的均值,然后我只想保留这些列的均值大于10的df。我已经尝试了以下方法:
我创建了一个函数,根据计算出的平均值返回逻辑值:
``` mean_logical <- function(column_mean) { column_mean_logical <- if_else(mean(column_mean) > 10, TRUE, FALSE) return(column_mean_logical) } ```
然后,我想使用`{purrr}`中的`keep`函数,并将我的函数(`mean_logical`)应用于过滤平均数小于10的df的第三列。但是,我不确定如何指示检查列表中每个df的第三列。
值得注意的是,我发现访问列表中每个 df 的第三列的唯一方法是使用以下方式:
lapply(df_list, "[", 3)
有什么建议吗?提前感谢!