计算 R 中多个列的每月和每年百分比变化

  • 本文关键字:百分比 变化 计算 r dplyr
  • 更新时间 :
  • 英文 :


我有一个数据帧df如下:

df <- read.table(text = "date    value1    value2
2019-01        0.7         1.4
2019-02        0.11        2.3
2019-03        1.22        6.7
2019-04        0.44        5.2
2019-05        0.19        2.3
2019-06        3.97        9.5
2019-07        1.24        2.4
2019-08        0.23        2.88
2019-09        0.66        9.5
2019-10        1.24        2.2
2019-11        0.23        2.28
2019-12        0.66        9.3
2020-01        0.6         1.2
2020-02        0.13        2.1
2020-03        1.12        6.4
2020-04        0.34        5.1
2020-05        0.29        2.1
2020-06        3.47        9
2020-07        1.44        2.1
2020-08        0.33        2.5
2020-09        0.76        9.2
2020-07        1.28        2.43
2020-08        0.25        2.8
2020-09        0.69        9.5",
header = TRUE, stringsAsFactors = FALSE)

如何计算 R 中列value1value2列的月pct_changes年pct_changes?谢谢。

在熊猫中,我们可以将apply(lambda: x.pct_change())用于month_pctapply(lambda: x.pct_change(12))用于year_pct,我不知道在R中是否具有类似的功能。

> 您的日期列character,最好将其转换为Date对象。 使用包lagdplyr函数来执行计算。

这是针对value1列的。

df %>%
mutate(date = lubridate::ymd(paste0(date, '-01'))) %>%
mutate(monthly_pct_changes = round((value1 / lag(value1) - 1) * 100, 2),
yearly_pct_changes = round((value1 / lag(value1, 12) - 1) * 100, 2))

对另一列重复相同的过程。

您可以使用lag访问上一行的值:

library(dplyr)
df %>%
mutate(across(c(value1,value2), list(monthly = ~(. - lag(.))/lag(.), 
yearly = ~(. - lag(., 12))/lag(., 12))))
#      date value1 value2 value1_monthly value1_yearly value2_monthly value2_yearly
#1  2019-01   0.70   1.40             NA            NA             NA            NA
#2  2019-02   0.11   2.30    -0.84285714            NA     0.64285714            NA
#3  2019-03   1.22   6.70    10.09090909            NA     1.91304348            NA
#4  2019-04   0.44   5.20    -0.63934426            NA    -0.22388060            NA
#...

最新更新