Мы можем l oop над list
с lapply
, получить colMeans
столбцов «A», «B», исключая строки, где «Имена» являются «Базовыми» или «AASHTO», затем rbind
с исходным набором данных
lst2 <- lapply(lst1, function(x) {
means <- colMeans(x[!x$Names %in% c("Baseline", "AASHTO"),
c('A', 'B')], na.rm = TRUE)
d1 <- rbind(x, data.frame(Names = "Mean", as.list(means)))
row.names(d1) <- d1$Names
d1[setdiff(names(d1), "Names")]
})
или с использованием tidyverse
library(dplyr)
library(purrr)
library(tibble)
map(lst1, ~ .x %>%
add_row(Names = 'Mean',
A = mean(.$A[!.$Names %in% c("Baseline", "AASHTO")],
na.rm = TRUE),
B = mean(.$B[!.$Names %in% c("Baseline", "AASHTO")], na.rm = TRUE)) %>%
`row.names<-`(., NULL) %>%
column_to_rownames('Names'))
данных
lst1 <- list(structure(list(A = c(0.8262825, 1.01, 0.8262825, 1.01, 0.8262825,
1.01, 0.8262825, 1.01, 0.8262825, 1.01, 0.8262825, 1.01), B = c(0.734412,
0.734412, 0.734412, 0.734412, 0.734412, 0.734412, 0.734412, 0.734412,
0.734412, 0.734412, 0.734412, NA), Names = c("Baseline", "Sample1",
"Sample2", "Sample3", "Sample4", "Sample5", "Sample6", "Sample7",
"Sample8", "Sample9", "Sample10", "AASHTO")), class = "data.frame", row.names = c("1",
"2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12")), structure(list(
A = c(0.8262825, 1.01, 0.8262825, 1.01, 0.8262825, 1.01,
0.8262825, 1.01, 0.8262825, 1.01, 0.8262825, 1.01), B = c(0.734412,
0.734412, 0.734412, 0.734412, 0.734412, 0.734412, 0.734412,
0.734412, 0.734412, 0.734412, 0.734412, NA), Names = c("Baseline",
"Sample1", "Sample2", "Sample3", "Sample4", "Sample5", "Sample6",
"Sample7", "Sample8", "Sample9", "Sample10", "AASHTO")), class = "data.frame", row.names = c("1",
"2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12")))