从累计数据中获取回溯发生率数据?

问题描述 投票:1回答:1

我有一个数据框,其中有日期数据和累计计数。反身 以获得每天的计数 不过 也得到每组的计数.我试图从数据框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
1个回答
1
投票

diff 返回 length 比原来的长度少一个,而 mutate 要求输出列具有相同的 length 作为原始值(或长度1,可以循环使用)。 我们可以附加一个值,可能是 NAfirst 'cum_count'的值

library(dplyr)
df %>%
  group_by(state)%>%
  mutate(daily_count = c(first(cum_count), diff(cum_count)))
# A tibble: 6 x 4
# Groups:   state [2]
#  cum_count state    Year daily_count
#      <dbl> <fct>   <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

或者为此目的,使用 lag 并从该列中减去

df %>%
    group_by(state)%>%
    mutate(daily_count = replace_na(cum_count - lag(cum_count), first(cum_count)))
© www.soinside.com 2019 - 2024. All rights reserved.