【发布时间】:2019-05-21 20:29:18
【问题描述】:
我有一个数据想要计算上一年和上一季度的增长率。
# dt
yq A B
2013 Q1 35233684 270950851
2013 Q2 36235895 274194641
2013 Q3 36767497 275614372
2013 Q4 37273346 277125049
2014 Q1 37788578 278202677
2014 Q2 38674955 281025545
str(dt)
Classes ‘data.table’ and 'data.frame': 6 obs. of 3 variables:
$ yq : 'yearqtr' num 2013 Q1 2013 Q2 2013 Q3 2013 Q4 ...
$ A : int 35233684 36235895 36767497 37273346 37788578 38674955
$ B: int 270950851 274194641 275614372 277125049 278202677 281025545
- attr(*, ".internal.selfref")=<externalptr>
我使用的代码:
dt[, lapply(.SD, function(x)x/shift(x) - 1), .SDcols = 2:3, by = .(quarter(yq))]
quarter A B
1 NA NA
1 0.07251283 0.02676436
2 NA NA
2 0.06731060 0.02491261
3 NA NA
4 NA NA
我得到了结果;但是,我想要这样的格式:
我希望它保留yq 列并按年份和季度排序。
yq A B
2013 Q1 35233684 270950851
2013 Q2 36235895 274194641
2013 Q3 36767497 275614372
2013 Q4 37273346 277125049
2014 Q1 37788578 278202677
2014 Q2 38674955 281025545
yq A B A_R B_R
2013 Q1 35233684 270950851 NA NA
2013 Q2 36235895 274194641 NA NA
2013 Q3 36767497 275614372 NA NA
2013 Q4 37273346 277125049 NA NA
2014 Q1 37788578 278202677 0.07251283 0.02676436
2014 Q2 38674955 281025545 0.06731060 0.02491261
如何编辑我的代码?
# Data
library(data.table)
dt <- fread("yq A B
2013 Q1 35233684 270950851
2013 Q2 36235895 274194641
2013 Q3 36767497 275614372
2013 Q4 37273346 277125049
2014 Q1 37788578 278202677
2014 Q2 38674955 28102554", header = T)
【问题讨论】:
-
您能否以您正在使用的形式提供示例数据?
dt示例数据不使用与dt相同的 year-qtr 格式。 -
cols <- c("A", "B") ; dt[, paste0(cols, "_R") := .SD / shift(.SD, 4) - 1, .SDcols = cols]
标签: r data.table data-manipulation