簡體   English   中英

data.frames R 列表中元素的平均值

[英]mean of elements in list of lists of data.frames R

我有以下列表:

x<- 
[[1]]
[[1]][[1]]
   Band   n
1:    A   4
2:    B  14
3:    C 148
4:    D 207

[[1]][[2]]
   Band   n
1:    A   4
2:    B  13
3:    C 151
4:    D 207

[[1]][[3]]
   Band   n
1:    A   4
2:    B  13
3:    C 152
4:    D 207

[[1]][[4]]
   Band   n
1:    A   4
2:    B  13
3:    C 156
4:    D 207


[[2]]
[[2]][[1]]
   Band   n
1:    A   4
2:    B  14
3:    C 148
4:    D 207

[[2]][[2]]
   Band   n
1:    A   4
2:    B  13
3:    C 153
4:    D 207

[[2]][[3]]
   Band   n
1:    A   4
2:    B  13
3:    C 155
4:    D 207

[[2]][[4]]
   Band   n
1:    A   4
2:    B  12
3:    C 158
4:    D 207
  

您可以通過以下方式獲得:

x <- list(list(structure(list(Band = c("A", "B", "C", "D"), n = c(4L, 14L, 148L, 
                                                                                        207L)), row.names = c(NA, 
                                                                                                                                                                    -4L), class = c("data.table", "data.frame")), 
               structure(list(Band = c("A", "B", "C", "D"), n = c(4L, 13L, 151L, 
                                                                                   207L
                                       )), row.names = c(NA, -4L), class = c("data.table", "data.frame"
                                       )), structure(list(
                                           Band = c("A", "B", "C", "D"), n = c(4L, 13L, 152L, 207L
                                                                                        )), row.names = c(NA, 
                                                                                                                                                               -4L), class = c("data.table", "data.frame")), 
               structure(list(Band = c("A", "B", "C", "D"), n = c(4L, 13L, 156L, 
                                                                                   207L
                                       )), row.names = c(NA, -14L), class = c("data.table", "data.frame"
                                       ))), list(
                                           structure(list(Band = c("A", "B", "C","D"), n = c(4L, 14L, 148L, 
                                                                                                               207L
                                                                   )), row.names = c(NA, -4L), class = c("data.table", "data.frame"
                                                                   )), structure(list(
                                                                       Band = c("A", "B", "C", "D"), n = c(4L, 13L, 153L, 207L 
                                                                                                                    )), row.names = c(NA, 
                                                                                                                                                                                           -4L), class = c("data.table", "data.frame")), 
                                           structure(list(Band = c("A", "B", "C", "D"), n = c(4L, 13L, 155L, 
                                                                                                               207L
                                                                   )), row.names = c(NA, -4L), class = c("data.table", "data.frame"
                                                                   )), structure(list(
                                                                       Band = c("A", "B", "C", "D"), n = c(4L, 12L, 158L, 207L 
                                                                                                                     )), row.names = c(NA, 
                                                                                                                                                                                           -4L), class = c("data.table", "data.frame"))))

我需要在同一時間段內獲得每個波段的 n 平均值,這意味着:

mean([[1]][[1]], [[2]][[1]])
mean([[1]][[2]], [[2]][[2]])

如果 Band 列不存在,我會知道如何使用 ''' do.call(cbind, x)''' 來做到這一點。 但就像那樣,我有數據表的列表。

也許我們可以做一個transpose

library(purrr)
library(data.table)
library(magrittr)
transpose(x) %>%
       map(~ rbindlist(.x)[, .(n = mean(n)), Band])

-輸出

#[[1]]
#   Band   n
#1:    A   4
#2:    B  14
#3:    C 148
#4:    D 207

#[[2]]
#   Band   n
#1:    A   4
#2:    B  13
#3:    C 152
#4:    D 207

#[[3]]
#   Band     n
#1:    A   4.0
#2:    B  13.0
#3:    C 153.5
#4:    D 207.0

#[[4]]
#   Band     n
#1:    A   4.0
#2:    B  12.5
#3:    C 157.0
#4:    D 207.0

這是使用aggregate + asplit的基本 R 選項

Map(
  function(x) aggregate(n ~ ., do.call(rbind, x), mean),
  asplit(do.call(cbind, x), 1)
)

這使

[[1]]
  Band   n
1    A   4
2    B  14
3    C 148
4    D 207

[[2]]
  Band   n
1    A   4
2    B  13
3    C 152
4    D 207

[[3]]
  Band     n
1    A   4.0
2    B  13.0
3    C 153.5
4    D 207.0

[[4]]
  Band     n
1    A   4.0
2    B  12.5
3    C 157.0
4    D 207.0

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM