将求和的行拆分为R中的各行

时间:2016-10-31 18:16:58

标签: mysql r tidyr

我有一组数据,其中我存储在一行(观察)中的特定值的年度总计。我想整理R中的数据,以便使用一个简单的等式(总数/ 12)来分析每个月的总行数,该等式存储年度总数除以12行中的每一行12作为月总数。我试图在R中这样做,但我是初学者,不太确定从哪里开始。示例如下:

Date | Total
2015 | 12,000 

Some R function to convert to:

   Date    | Total
01-01-2015 | 1,000
02-01-2015 | 1,000
03-01-2015 | 1,000

1 个答案:

答案 0 :(得分:0)

这是一个多年的示例数据集,我认为这是您想要的用例:

public onSubmit():void{
    this.companyServ.test().subscribe(data => {
        console.log('Data', data);
    }, err => {
        console.error('Error', err);
    });
}

然后,我将data.frame拆分为myData <- data.frame( Date = 2011:2015 , Total = (1:5)*1200 ) 列(这假定年份是唯一的),循环使用Date修改为您想要的月度值,然后将它们拼接回来与来自lapply的{​​{1}}一起(还需要加载bind_rowsdplyr来管道(dplyr)才能正常工作。

magrittr

给予(注意,使用%>%表示跳过的行)

myData %>%
  split(.$Date) %>%
  lapply(function(x){
    temp <- data.frame(
      Date = as.Date(paste(x$Date
                           , formatC(1:12, width = 2, flag = "0")
                           , "01"
                           , sep = "-"))
      , Total = x$Total / 12
    )
  }) %>%
  bind_rows()

如果如评论中所建议的那样,你需要每年除以不同的月数,我会创建一个以年命名的除数的向量。在这里,我使用... Date Total 1 2011-01-01 100 2 2011-02-01 100 3 2011-03-01 100 ... 16 2012-04-01 200 17 2012-05-01 200 18 2012-06-01 200 ... 29 2013-05-01 300 30 2013-06-01 300 31 2013-07-01 300 ... 43 2014-07-01 400 44 2014-08-01 400 45 2014-09-01 400 ... 58 2015-10-01 500 59 2015-11-01 500 60 2015-12-01 500 dplyr管道来简化常见案例的命名。然后,添加/更改不同年份的条目:

n_distinct

然后,您可以使用此向量代替上面的magrittr。所以,替换这个:

toDivide <-
  rep(12, n_distinct(myData$Date)) %>%
  setNames(sort(unique(myData$Date)))

toDivide["2016"] <- 9

12循环中,使用:

Total = x$Total / 12

它应该除以那一年的条目,而不是总是除以相同的东西。