這是我的資料:
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)
)
uj5u.com熱心網友回復:
另一種可能的解決方案,基于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
uj5u.com熱心網友回復:
您可以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
uj5u.com熱心網友回復:
一個purrr解決方案
library(purrr)
library(dplyr)
mylist %>%
map_depth(., 2, ~ .x %>% summarise(mean = mean(x, na.rm = T))) %>%
bind_rows() %>%
pull()
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/462277.html
