R 如何计算列表中数据帧的平均值?
将数据组合成一个数据框(R 如何计算列表中数据帧的平均值?,r,R,将数据组合成一个数据框(Combine_data),将数据分为两个列表,一个包含'b'和'f'值,另一个包含其余值,并计算每个月的平均值 [[1]] # mean of values of b and f date X0 X1 mod Jan 2 2 mod1 Feb 1.5 5.5 mod1 [[2]] # mean of values of the rest (m,gg,d) date X0 X1 mod Jan ? ?
Combine_data
),将数据分为两个列表,一个包含'b'
和'f'
值,另一个包含其余值,并计算每个月的平均值
[[1]] # mean of values of b and f
date X0 X1 mod
Jan 2 2 mod1
Feb 1.5 5.5 mod1
[[2]] # mean of values of the rest (m,gg,d)
date X0 X1 mod
Jan ? ? mod2
Feb ? ? mod2
如果
library(dplyr)
library(purrr)
bind_rows(merged.list) %>%
group_split(mod %in% c('b', 'f'), .keep = FALSE) %>%
map(~.x %>% group_by(date) %>% summarise(across(X0:X1, mean, na.rm = TRUE)))
库(dplyr)
图书馆(purrr)
映射%c('b','f'),~
.x%>%
分组单位(日期)%>%
总结(跨越(其中(是数字),平均值)),.else=NA_字符%>%
keep(否定(is.null))
#[[1]]
#一个tibble:3x3
#日期X0-X1
#*
#2月1日3.5
#1月2日12
#3月3日6.5 6.5
#[[2]]
#一个tibble:3x3
#日期X0-X1
#*
#2月1日-0.50
#2001年1月2日
#3月3日6.5.5
非常感谢,如果我有X0、X1、X2、X3、X4(几列)?在dplyr
答案中,你可以使用跨越(X0:X4,mean,na.rm=TRUE)
甚至跨越(以('X')开头,mean,na.rm=TRUE)
combine_data <- do.call(rbind, merged.list)
lapply(split(combine_data, combine_data$mod %in% c('b', 'f')), function(x) {
aggregate(cbind(X0, X1)~date, x, mean)
})
library(dplyr)
library(purrr)
bind_rows(merged.list) %>%
group_split(mod %in% c('b', 'f'), .keep = FALSE) %>%
map(~.x %>% group_by(date) %>% summarise(across(X0:X1, mean, na.rm = TRUE)))
library(dplyr)
library(purrr)
map_if(merged.list, .p = ~ first(.x$mod) %in% c('b', 'f'), ~
.x %>%
group_by(date) %>%
summarise(across(where(is.numeric), mean)), .else = NA_character_) %>%
keep(negate(is.null))
#[[1]]
# A tibble: 3 x 3
# date X0 X1
#* <chr> <dbl> <dbl>
#1 Feb 0 3.5
#2 Jan 1 2
#3 Mar 6.5 6.5
#[[2]]
# A tibble: 3 x 3
# date X0 X1
#* <chr> <dbl> <dbl>
#1 Feb -0.5 0
#2 Jan 2 1
#3 Mar 6.5 5.5