从第一行计算数据帧的百分比变化

Ale*_*ini 1 r dataframe

我想使用第一行作为参考来计算数据框中的百分比变化。例如我的数据框

Set  rate  field
 A     3     10
 B     2     17
 C     5     4
Run Code Online (Sandbox Code Playgroud)

使用 A 行作为参考,我想计算数据框中所有列从 A 行到每隔一行的百分比变化。这将导致

Set  rate  field      
 A     3     10 
 B    -33    70
 C    66.66  -60

or

Set  rate  field pct_rate   pct-field
 A     3     10     0           0
 B     2     17     -33         70
 C     5     4      66.66       -60
Run Code Online (Sandbox Code Playgroud)

我的代码:

 z %>%
   mutate(pct_rate = (rate - lag(rate)/ rate ) * 100)
Run Code Online (Sandbox Code Playgroud)

这没有给我想要的结果

dar*_*rio 5

df <- fread("Set  rate  field
 A     3     10
 B     2     17
 C     5     4")
Run Code Online (Sandbox Code Playgroud)

Soltuion using dplyr:我们可以使用 dplyr 的first函数来引用向量的第一个元素(您的尝试与lag此解决方案非常接近)。我first(rate)还在分母中使用了计算百分比差异以获取示例中的数字...

library(dplyr)
df %>% 
  mutate(pct_rate = (rate - first(rate)) / first(rate)  * 100,
         pct_field = (field - first(field)) / first(field)  * 100)
Run Code Online (Sandbox Code Playgroud)

返回:

   Set rate field  pct_rate pct_field
1:   A    3    10   0.00000         0
2:   B    2    17 -33.33333        70
3:   C    5     4  66.66667       -60
Run Code Online (Sandbox Code Playgroud)