【问题标题】:Merge vs Sort: ordering dataframe by month/year合并与排序:按月/年排序数据框
【发布时间】:2017-04-03 15:33:12
【问题描述】:

我需要根据月/年格式按时间顺序对数据框进行排序,并获得月度总和和平均值。 我尝试了几次:这是合并或排序的问题,我没有得到一个干净的数据框。

这是一个可重现的示例。 日期应该是 class() 格式。

Date <- c('2008-05-12','2006-01-30', '2006-02-29', '2006-01-15', '2008-05-20','2008-09-26')
Income <- c(10, 20, 30, 20, 10, 20)
df<-data.frame(Date,Income)

我想实现一个这种形式的data.frame

ShortDate  Sum    Mean
01-2006    40      20
02-2006    30      30
05-2008    20      10
09-2008    20      20

感谢您的任何建议。

【问题讨论】:

  • 2006年2月只有28天

标签: r sorting datetime merge


【解决方案1】:

使用dplyr,我们按formatted '日期' (%m-%Y) 和summarise 与'收入'的sum 和mean 分组。

library(dplyr)
df %>% 
   group_by(ShortDate = format(as.Date(Date), "%m-%Y")) %>% 
   summarise(Sum = sum(Income), Mean = mean(Income)) 
#   ShortDate   Sum  Mean
#      <chr> <dbl> <dbl>
#1   01-2006    40    20
#2   02-2006    30    30
#3   05-2008    20    10
#4   09-2008    20    20

或者在base R 和aggregate

do.call(data.frame, aggregate(Income~ShortDate,
   transform(df, ShortDate = format(as.Date(Date), "%m-%Y")),
         FUN = function(x) c(Sum = sum(x), Mean = mean(x))))

【讨论】:

  • 谢谢阿克伦。我不知道图书馆(dplyr)。有没有办法进入base R?
  • @MoOdEV 更新为 base R 选项
  • 当我尝试使用其他数据集时,我没有得到关于月份和年份的有序数据框,但只尊重月份。
  • @MoOdEV 请检查“日期”格式是否正确
  • class(Date) is factor.when我aggregare尊重ShortDate我失去了按时间顺序排列的年份。我得到类似“01/2009”“01/2010”“02/2009”“02/2010”的东西
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-06-01
  • 2023-03-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多