[英]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.