计算列表的列表中每个数据帧的平均值,并将其赋值给r中的新向量



这是我的数据:

df1 <- data.frame(x = 1:5, y = letters[1:5])
df2 <- data.frame(x = 1:15, y = letters[1:15])
df3 <- data.frame(x = 1:25, y = letters[1:25])
df4 <- data.frame(x = 1:6, y = letters[1:6])
df5 <- data.frame(x = 1:8, y = letters[1:8])
l1 <- list(df1, df2)
l2 <- list(df3, df4, df5)
mylist <- list(l1, l2)

我想在mylist中计算所有数据帧中x列的平均值,并将它们放入一个新的空列表(或向量)中,如下所示:

mean_vec <- c(
mean(df1$x),
mean(df2$x),
mean(df3$x),
mean(df4$x),
mean(df5$x)
)

另一种可能的解决方案,基于purrr::map_depth:

library(tidyverse)
map_depth(mylist, 2, ~ mean(.x$x)) %>% unlist
#> [1]  3.0  8.0 13.0  3.5  4.5

或者使用rrapply::rrapply,由于@Maël的评论,现在更短的解决方案,我感谢谁:

library(rrapply)
library(magrittr)
rrapply(mylist, condition = is.numeric, f = mean, how = "unlist") %>% unname
#> [1]  3.0  8.0 13.0  3.5  4.5

您可以unlist您的嵌套列表并计算每个的平均值:

mean_vec <- sapply(unlist(mylist, recursive = F), function(dat) mean(dat$x))
mean_vec
# [1]  3.0  8.0 13.0  3.5  4.5

rapply的另一个选项:

mean <- rapply(mylist, mean)
unname(mean[names(mean) == "x"])
# [1]  3.0  8.0 13.0  3.5  4.5

purrr解决方案

library(purrr)
library(dplyr)
mylist %>%
map_depth(., 2, ~ .x %>% summarise(mean = mean(x, na.rm = T))) %>%
bind_rows() %>%
pull()

相关内容

最新更新