首页 > 解决方案 > 按 R 中的组计算平均值

问题描述

我想计算大陆每年的平均值。

结果将是这样的:

Mainland 1990 1991 1992 1993 ...
Europe     1    55  66   678
Asia       43   6    7
Oceania          .
Americas         .
Africa           .

首先,我选择了我需要的列,然后尝试使用 R 中的 dplyr 包进行计算,但它不起作用。

gr1 <- homicide_ratios %>% 
  select('Mainland', matches("[0-9]{4}")) 

gr1 %>% 
  group_by(Mainland) %>% 
  summarise(media = mean(gr1[, 2:ncol(gr1)], na.rm = T))

我给你看数据集:

在此处输入图像描述

提前致谢。

标签: rdplyr

解决方案


思路是将数据的格式从宽格式改为长格式,然后对数据进行分组,总结如下;

library(dplyr)
library(tidyr)

homicide_ratios <-
  data.frame(
    Mainland = c("Europe", "Asia", "Oceania", "Americas", "Africa"),
    "1990" = c(1, 2, 3, 4, 5),
    "1991" = c(1, 2, 3, 4, 5),
    "1992" = c(1, 2, 3, 4, 5),
    "1993" = c(1, 2, 3, 4, 5)
  )

homicide_ratios %>%
  gather(key = "year", value = "rate", -Mainland) %>%
  group_by(Mainland, year) %>%
  summarize(average = mean(rate))

# # A tibble: 20 x 3
# # Groups:   Mainland [5]
# Mainland year  average
# <fct>    <chr>   <dbl>
#   Africa   X1990       5
#   Africa   X1991       5
#   Africa   X1992       5
#   Africa   X1993       5
#   Americas X1990       4
#   Americas X1991       4
#   Americas X1992       4

推荐阅读