我们可以重塑为“长”格式并获得按“年”分组的summarised 输出
library(dplyr)
library(tidyr)
df1 %>%
pivot_longer(cols = -Age, names_to = 'Year') %>%
group_by(Year) %>%
summarise(Avg_age = sum(Age * value)/sum(value), .groups = 'drop')
-输出
# A tibble: 3 x 2
# Year Avg_age
#* <chr> <dbl>
#1 2000 3.3
#2 2001 3.62
#3 2002 3.4
或者也可以反过来做,即先得到汇总输出,然后再进行整形
df1 %>%
summarise(across(-Age, ~ sum(Age * .)/sum(.))) %>%
pivot_longer(cols = everything(), names_to = 'Year',
values_to = 'Avg_age')
# A tibble: 3 x 2
# Year Avg_age
# <chr> <dbl>
#1 2000 3.3
#2 2001 3.62
#3 2002 3.4
或者使用dapply 和stack
library(collapse)
stack(dapply(df1[-1], function(x) sum(x * df1$Age)/sum(x)))[2:1]
数据
df1 <- structure(list(Age = 2:4, `2000` = c(4, 6, 10), `2001` = c(1,
3, 9), `2002` = c(2, 5, 8)), row.names = c(NA, -3L), class = "data.frame")