【问题标题】:Reverse engineering cumulative to daily data?逆向工程累积到每日数据?
【发布时间】:2020-05-01 16:10:04
【问题描述】:

我有一个数据框,其中包含日期数据和累积计数。 我正在尝试进行 cumsum 的反转 以获取每日计数 也获取每组的计数。 我正在尝试从数据框 A 转到数据框 B。 我正在使用 R 和 tidyr

代码如下:


df <- data.frame(cum_count = c(5, 14, 50, 5, 14, 50),
                 state = c("Alabama", "Alabama", "Alabama", "NY", "NY", "NY"),
                 Year = c(2012:2014, 2012:2014))

Dataframe A
  cum_count   state Year
1         5 Alabama 2012
2        14 Alabama 2013
3        50 Alabama 2014
4         5      NY 2012
5        14      NY 2013
6        50      NY 2014
Dataframe B
  cum_count   state Year
1         5 Alabama 2012
2         9 Alabama 2013
3        36 Alabama 2014
4         5      NY 2012
5         9      NY 2013
6        36      NY 2014

我尝试过使用 diff 函数:

df <- df %>%group_by(state)%>%
      mutate(daily_count = diff(cum_count))

但我明白了

错误:列 daily_count 的长度必须为 3(行数)或 1,而不是 2

让我知道你的想法。

谢谢!

【问题讨论】:

    标签: r diff cumsum cumulative-sum


    【解决方案1】:

    也许你可以试试diff,例如,

    df <- df %>%group_by(state)%>%
      mutate(daily_count = c(cum_count[1],diff(cum_count)))
    

    这样

    > df
    # A tibble: 6 x 4
    # Groups:   state [2]
      cum_count state    Year daily_count
          <dbl> <chr>   <int>       <dbl>
    1         5 Alabama  2012           5
    2        14 Alabama  2013           9
    3        50 Alabama  2014          36
    4         5 NY       2012           5
    5        14 NY       2013           9
    6        50 NY       2014          36
    

    这是通过ave 提供的基本 R 选项

    df <- within(df,daily_count <- ave(cum_count,state,FUN = function(x) c(x[1],diff(x))))
    

    这样

    > df
      cum_count   state Year daily_count
    1         5 Alabama 2012           5
    2        14 Alabama 2013           9
    3        50 Alabama 2014          36
    4         5      NY 2012           5
    5        14      NY 2013           9
    6        50      NY 2014          36
    

    【讨论】:

    • 感谢@ThomasIsCoding!您的解决方案确实有效。但我更具体地将问题更新到我的数据集,并增加了每组这样做的挑战。这里按州。在这种情况下,不幸的是它不起作用。你认为你能找到解决办法吗?
    • 感谢@ThomasIsCoding。像奇迹一样工作!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-01-14
    • 2011-10-13
    • 2017-03-29
    • 1970-01-01
    • 2011-07-24
    • 2017-05-05
    • 1970-01-01
    相关资源
    最近更新 更多