首页 > 解决方案 > 将月度数据转换为 r 中数据框中的年度数据

问题描述

我有一个显示2000-2010 年每月 mgpp的数据框:

dataframe1 
     Year Month       mgpp
  1: 2000     1 0.01986404
  2: 2000     2 0.011178429
  3: 2000     3 0.02662008
  4: 2000     4 0.05034293
  5: 2000     5 0.23491388
 ---                      
128: 2010     8 0.13234501
129: 2010     9 0.10432369
130: 2010    10 0.04329537
131: 2010    11 0.04343289
132: 2010    12 0.09494946

我正在尝试将此 dataframe1 转换为将显示变量 mgpp 的栅格。但是我想首先格式化数据框,它只会显示每年的 mgpp。预期结果如下所示:

dataframe1
     Year       mgpp
  1: 2000      0.01986704
  2: 2001      0.01578429
  3: 2002      0.02662328
  4: 2003      0.05089593
  5: 2004      0.07491388

6: 2005        0.11229201
7: 2006        0.10318569
8: 2007        0.07129537
9: 2008        0.04373689
10: 2009       0.02885386
11: 2010       0.74848348

我想按平均值汇总月份。例如,2000 年的值显示一个值,即 2000 年 1 月至 12 月的平均值。我怎样才能做到这一点?帮助将不胜感激

标签: rdataframe

解决方案


这里有一个data.table办法。

library(data.table)
setDT(dataframe1)[,.(Yearly.mgpp = mean(mgpp)),by=Year]
   Year Yearly.mgpp
1: 2000  0.06858387
2: 2010  0.08366928

或者,如果您愿意dplyr

library(dplyr)
dataframe1 %>% 
  group_by(Year) %>% 
  summarise(Yearly.mgpp = mean(mgpp))

# A tibble: 2 x 2
   Year Yearly.mgpp
  <dbl>       <dbl>
1  2000      0.0686
2  2010      0.0837

或基数 R。

result <- sapply(split(dataframe1$mgpp,dataframe1$Year),mean)
data.frame(Year = as.numeric(names(result)),Yearly.mgpp = result)
     Year Yearly.mgpp
2000 2000  0.06858387
2010 2010  0.08366928

样本数据

dataframe1 <- structure(list(Year = c(2000, 2000, 2000, 2000, 2000, 2010, 2010, 
2010, 2010, 2010), Month = c(1, 2, 3, 4, 5, 8, 9, 10, 11, 12), 
    mgpp = c(0.01986404, 0.011178429, 0.02662008, 0.05034293, 
    0.23491388, 0.13234501, 0.10432369, 0.04329537, 0.04343289, 
    0.09494946)), class = "data.frame", row.names = c(NA, -10L
))

推荐阅读