首页 > 解决方案 > 试图找出 R 组内周间美元的百分比变化

问题描述

我有一个类似于以下的df(更大):

df = data.frame(r_id = c(1, 1 ,1, 1, 2,2,2,2, 3,3,3,3), s_id = c(1,2,3,4,5,6,7,8,9,10, 11,12),
                week = c(2021080801, 2021080101, 2021072501, 2021071801, 2021080801, 2021080101, 2021072501, 2021071801, 2021080801, 2021080101, 2021072501, 2021071801),
                price = c(96992.88, 104458.36, 106485.10, 105094.09, 103550.74, 
                          104990.28, 109912.51, 116662.20, 113178.26, 111779.15, 120553.04, 123132.30))

r_id 列分为不同的类别。每个组包含一定的周数和每周相关的美元金额。我试图在每个组中找到前一周每一美元金额之间的百分比变化,并将其保存在数据框中自己的列中。例如对于 r_id 1,我想计算从第 2021080801 周到第 2021080101 周、然后从第 2021080101 周到第 2021072501 周的百分比差异,依此类推。但是,第 2021071801 周不会有任何百分比变化,因为在组中没有前一周。

我知道如何通过以下方式使用滞后来获得差异:

df = df %>% group_by(r_id) %>%
  mutate(change = price - lag(price))*100/lag(price))


但是顺序是相反的,当应用于我更大的数据集时,百分比似乎是关闭的......

标签: rdplyrlagdifference

解决方案


也许使用lead

library(dplyr)
df %>% 
    group_by(r_id) %>%
    mutate(change = (price - lead(price)) * 100 /lead(price))

推荐阅读