我想使用第一行作为参考来计算数据框中的百分比变化。例如我的数据框
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)
这没有给我想要的结果
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)