如何计算R中分组数据帧中行之间的变化?

如何计算R中分组数据帧中行之间的变化?,r,dataframe,dplyr,R,Dataframe,Dplyr,我有以下数据框: A tibble: 47,898 x 4 # Groups: countyfips [1,774] countyfips day_month_year new_case_rate_07da case_rate <dbl> <date> <dbl> <dbl> 1 1001 2020-01-12

我有以下数据框:

    A tibble: 47,898 x 4
# Groups:   countyfips [1,774]
   countyfips day_month_year new_case_rate_07da case_rate
        <dbl> <date>                      <dbl>     <dbl>
 1       1001 2020-01-12                      0         0
 2       1001 2020-01-19                      0         0
 3       1001 2020-01-26                      0         0
 4       1001 2020-02-02                      0         0
 5       1001 2020-02-09                      0         0
 6       1001 2020-02-16                      0         0
 7       1001 2020-02-23                      0         0
 8       1001 2020-03-01                      0         0
 9       1001 2020-03-08                      0         0
10       1001 2020-03-15                      0         0
# … with 47,888 more rows
但所有行的输出都为零(即使10之后的行中的值不是零)

您将如何尝试解决此问题?非常感谢。

看一看哪一个计算
lag
行之间向量或矩阵
x
的滞后差(默认值1)

以以下为例:

d <- data.frame(cases = c(4, 2, 3, 10, 0, 100))
diff(d$cases)
# [1]  -2   1   7 -10 100
在您的具体问题中,我认为这应该有效:

Affinity_County_Weekly.csv %>% group_by(countyfips) %>% mutate(change_vs_last_week_case_rate = c(0, diff(case_rate))

您能否以可复制的方式(例如,
dput(Affinity\u country\u Weekly)
)共享数据集的更大部分(因此它不包括零值)?谢谢您的回复。代码起作用了,现在我有了病例率之间的差异。但当我尝试使用以下代码计算百分比变化时:
x%groupby(countyfips)%%>%mutate(growth\u case\u rate=c(0,diff(case\u rate)))%%>%mutate(change\u case\u rate=growth\u case\u rate/lag(case\u rate))
R只是计算增长率除以同一行的增长率:
case\u率增长率变化率变化率1 10.7 10.7 1 2 21.5 10.8 0.502
根据测试,我不太确定
lag
的作用,但是,您可以尝试在列的开头添加一个值,并删除最后一个值,这样可以有效地将每个值向后移动(
c(0,case\u rate[-length(case\u rate)]
)。如果除以0,该值应该是什么?
d$newCases <- c(0, diff(d$cases))
#   cases newCases
# 1     4        0
# 2     2       -2
# 3     3        1
# 4    10        7
# 5     0      -10
# 6   100      100
Affinity_County_Weekly.csv %>% group_by(countyfips) %>% mutate(change_vs_last_week_case_rate = c(0, diff(case_rate))