我有一个数据帧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 中列value1
和value2
列的月pct_changes和年pct_changes?谢谢。
在熊猫中,我们可以将apply(lambda: x.pct_change())
用于month_pct
,apply(lambda: x.pct_change(12))
用于year_pct
,我不知道在R中是否具有类似的功能。
> 您的日期列character
,最好将其转换为Date
对象。 使用包lag
dplyr
函数来执行计算。
这是针对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
#...