mysql - 将汇总行分解为 R 中的单独行

标签 mysql r tidyr

我有一组数据,其中一行中存储了特定值的年度总计(观察)。我想整理 R 中的数据,以便使用一个简单的方程式 (total/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

最佳答案

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

myData <-
  data.frame(
    Date = 2011:2015
    , Total = (1:5)*1200
  )

然后,我将 data.frame 按 Date 列拆分(这假设年份是唯一的),通过 lapply 循环修改为您的每月值需要,然后将它们与 dplyr 中的 bind_rows 拼接在一起(还需要为管道加载 dplyrmagrittr (%>%) 工作)。

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_distinctmagrittr 管道以简化常见情况的命名。然后,添加/更改不同年份的条目:

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

toDivide["2016"] <- 9

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

Total = x$Total / 12

lapply 循环中,用这个:

Total = x$Total / toDivide[as.character(x$Date)]

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

关于mysql - 将汇总行分解为 R 中的单独行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40348104/

相关文章:

r - 如何检验所有样本组合是否存在显着差异?

r - 如何在 R 版本 3.2.1 for Mac 中安装 ggplot2

mysql - 无法在 Linux (CentOS) 上安装 "mysql2"gem

静态 mysql 加密

java - 与其使用大量java代码,不如将脚本以文本文件的形式发送到DB?

c++ - 如何直接在 Rcpp 包中调用 nloptr 包中的 C 函数?

r - 计算r中文本的数量

r - 在 R 中生成向量值的运行组合

r - tidyr reshape tibble 而不扩展.grid

javascript - 将phonegap 图像发布到php/mysql - 图像字段从发布请求中消失?