按R中的组计算平均值

时间:2020-01-02 17:39:22

标签: r dplyr

我想计算每年的按大陆划分的平均值

结果将类似于:

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))

我向您展示了数据集:

enter image description here

谢谢。

1 个答案:

答案 0 :(得分:1)

想法是将数据的格式从宽格式更改为长格式,然后将数据分组并汇总如下;

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