总结列表中数据框的方法
Summarize means of data frames in a list
我在一个列表中有一些数据框,它们都具有相同的结构——在这个例子中是变量 a、b 和 c。现在我想总结一下列表中值的均值。
# list of 10 random data frames
n <- 1e1
initSeed <- 1234
set.seed(initSeed)
(seedVec <- sample.int(n = 1e3, size = n, replace = FALSE))
lst <- lapply(1:n, function(i){
set.seed(seedVec[i])
a <- rnorm(24,1,.1)
b <- rnorm(24,2,.2)
c <- rnorm(24,3,.3)
df <- data.frame(a,b,c)
})
我试图用 lst %>% summarize_all(mean)
喂 dplyr 但他不喜欢列表。下面的公式给出了列表中每个数据框的均值,但还没有给出所有数据框中这些变量 a、b 和 c 的均值。
lapply(1:10, function(n){
lst[n] %>%
data.frame() %>%
summarize_all(mean)
})
所以我想用汇总的输出制作一个新的数据框,以便再次汇总它们,但这失败了,我的扩展公式和 related answer 都抛出了 Error in lst[[idx]] : subscript out of bounds
这是我的尝试:
df1 <- as.data.frame(setNames(replicate(3,numeric(0), simplify = FALSE),
letters[1:3]))
lapply(1:10, function(n){
lst[n] %>%
data.frame() %>%
summarize_all(mean) %>%
rbind(df1, lst[n])
})
df1 %>% summarize_all(mean)
我怎样才能得到我想要的?
您可以使用 purrr
purrr::map_df(lst, function(df){summarize_all(df,mean)})
a b c
1 0.9917488 1.995821 3.121970
2 1.0007174 2.029938 2.962271
3 0.9582000 2.007167 3.046708
4 0.9745993 1.938877 3.015066
5 1.0050672 1.932359 3.052645
6 1.0196390 2.034723 2.998995
7 0.9717243 1.914532 3.024200
8 0.9954225 1.991664 2.981958
9 1.0148424 1.975775 2.949854
10 1.0014377 2.023839 2.976223
或者在基础 R 中...
t(sapply(lst,colMeans))
a b c
[1,] 0.9917488 1.995821 3.121970
[2,] 1.0007174 2.029938 2.962271
[3,] 0.9582000 2.007167 3.046708
[4,] 0.9745993 1.938877 3.015066
[5,] 1.0050672 1.932359 3.052645
[6,] 1.0196390 2.034723 2.998995
[7,] 0.9717243 1.914532 3.024200
[8,] 0.9954225 1.991664 2.981958
[9,] 1.0148424 1.975775 2.949854
[10,] 1.0014377 2.023839 2.976223
我在一个列表中有一些数据框,它们都具有相同的结构——在这个例子中是变量 a、b 和 c。现在我想总结一下列表中值的均值。
# list of 10 random data frames
n <- 1e1
initSeed <- 1234
set.seed(initSeed)
(seedVec <- sample.int(n = 1e3, size = n, replace = FALSE))
lst <- lapply(1:n, function(i){
set.seed(seedVec[i])
a <- rnorm(24,1,.1)
b <- rnorm(24,2,.2)
c <- rnorm(24,3,.3)
df <- data.frame(a,b,c)
})
我试图用 lst %>% summarize_all(mean)
喂 dplyr 但他不喜欢列表。下面的公式给出了列表中每个数据框的均值,但还没有给出所有数据框中这些变量 a、b 和 c 的均值。
lapply(1:10, function(n){
lst[n] %>%
data.frame() %>%
summarize_all(mean)
})
所以我想用汇总的输出制作一个新的数据框,以便再次汇总它们,但这失败了,我的扩展公式和 related answer 都抛出了 Error in lst[[idx]] : subscript out of bounds
这是我的尝试:
df1 <- as.data.frame(setNames(replicate(3,numeric(0), simplify = FALSE),
letters[1:3]))
lapply(1:10, function(n){
lst[n] %>%
data.frame() %>%
summarize_all(mean) %>%
rbind(df1, lst[n])
})
df1 %>% summarize_all(mean)
我怎样才能得到我想要的?
您可以使用 purrr
purrr::map_df(lst, function(df){summarize_all(df,mean)})
a b c
1 0.9917488 1.995821 3.121970
2 1.0007174 2.029938 2.962271
3 0.9582000 2.007167 3.046708
4 0.9745993 1.938877 3.015066
5 1.0050672 1.932359 3.052645
6 1.0196390 2.034723 2.998995
7 0.9717243 1.914532 3.024200
8 0.9954225 1.991664 2.981958
9 1.0148424 1.975775 2.949854
10 1.0014377 2.023839 2.976223
或者在基础 R 中...
t(sapply(lst,colMeans))
a b c
[1,] 0.9917488 1.995821 3.121970
[2,] 1.0007174 2.029938 2.962271
[3,] 0.9582000 2.007167 3.046708
[4,] 0.9745993 1.938877 3.015066
[5,] 1.0050672 1.932359 3.052645
[6,] 1.0196390 2.034723 2.998995
[7,] 0.9717243 1.914532 3.024200
[8,] 0.9954225 1.991664 2.981958
[9,] 1.0148424 1.975775 2.949854
[10,] 1.0014377 2.023839 2.976223