如何使用 R 将年度数据转换为月度数据?
How to convert annual data to monthly data using R?
我有 2000-2015 年 15 年的 GDP 年度数据。我想将此数据转换为只有月份和年份的月度数据。
我只想将那一年的值复制到所有月份。我怎么能在 R.e.g 中做到这一点2010 年的值为 1708。我想为 2010 年的所有月份复制相同的值。
我的数据:
> str(gdpnew)
'data.frame': 16 obs. of 3 variables:
$ X : int 1 2 3 4 5 6 7 8 9 10 ...
$ Date : Date, format: "2000-12-31" "2001-12-31" "2002-12-31" ...
$ Value: num 477 494 524 618 722 ...
> head(gdpnew)
X Date Value
1 1 2000-12-31 476.636
2 2 2001-12-31 493.934
3 3 2002-12-31 523.768
4 4 2003-12-31 618.369
5 5 2004-12-31 721.589
6 6 2005-12-31 834.218
>
显然你想要交叉连接:
DT <- read.table(text = " X Date Value
1 1 2000-12-31 476.636
2 2 2001-12-31 493.934
3 3 2002-12-31 523.768
4 4 2003-12-31 618.369
5 5 2004-12-31 721.589
6 6 2005-12-31 834.218", header = TRUE)
library(data.table)
setDT(DT)
DT[, Date := as.IDate(Date)]
DT[, year := year(Date)]
setkey(DT, year)
DT1 <- DT[CJ(year, month = 1:12)]
print(DT1)
# X Date Value year month
# 1: 1 2000-12-31 476.636 2000 1
# 2: 1 2000-12-31 476.636 2000 2
# 3: 1 2000-12-31 476.636 2000 3
# 4: 1 2000-12-31 476.636 2000 4
# 5: 1 2000-12-31 476.636 2000 5
# 6: 1 2000-12-31 476.636 2000 6
# 7: 1 2000-12-31 476.636 2000 7
# 8: 1 2000-12-31 476.636 2000 8
# 9: 1 2000-12-31 476.636 2000 9
#10: 1 2000-12-31 476.636 2000 10
#11: 1 2000-12-31 476.636 2000 11
#12: 1 2000-12-31 476.636 2000 12
#13: 2 2001-12-31 493.934 2001 1
#14: 2 2001-12-31 493.934 2001 2
#15: 2 2001-12-31 493.934 2001 3
#16: 2 2001-12-31 493.934 2001 4
#17: 2 2001-12-31 493.934 2001 5
#18: 2 2001-12-31 493.934 2001 6
#19: 2 2001-12-31 493.934 2001 7
#20: 2 2001-12-31 493.934 2001 8
#21: 2 2001-12-31 493.934 2001 9
#22: 2 2001-12-31 493.934 2001 10
#23: 2 2001-12-31 493.934 2001 11
#24: 2 2001-12-31 493.934 2001 12
#25: 3 2002-12-31 523.768 2002 1
#26: 3 2002-12-31 523.768 2002 2
#27: 3 2002-12-31 523.768 2002 3
#28: 3 2002-12-31 523.768 2002 4
#29: 3 2002-12-31 523.768 2002 5
#30: 3 2002-12-31 523.768 2002 6
#31: 3 2002-12-31 523.768 2002 7
#32: 3 2002-12-31 523.768 2002 8
#33: 3 2002-12-31 523.768 2002 9
#34: 3 2002-12-31 523.768 2002 10
#35: 3 2002-12-31 523.768 2002 11
#36: 3 2002-12-31 523.768 2002 12
#37: 4 2003-12-31 618.369 2003 1
#38: 4 2003-12-31 618.369 2003 2
#39: 4 2003-12-31 618.369 2003 3
#40: 4 2003-12-31 618.369 2003 4
#41: 4 2003-12-31 618.369 2003 5
#42: 4 2003-12-31 618.369 2003 6
#43: 4 2003-12-31 618.369 2003 7
#44: 4 2003-12-31 618.369 2003 8
#45: 4 2003-12-31 618.369 2003 9
#46: 4 2003-12-31 618.369 2003 10
#47: 4 2003-12-31 618.369 2003 11
#48: 4 2003-12-31 618.369 2003 12
#49: 5 2004-12-31 721.589 2004 1
#50: 5 2004-12-31 721.589 2004 2
#51: 5 2004-12-31 721.589 2004 3
#52: 5 2004-12-31 721.589 2004 4
#53: 5 2004-12-31 721.589 2004 5
#54: 5 2004-12-31 721.589 2004 6
#55: 5 2004-12-31 721.589 2004 7
#56: 5 2004-12-31 721.589 2004 8
#57: 5 2004-12-31 721.589 2004 9
#58: 5 2004-12-31 721.589 2004 10
#59: 5 2004-12-31 721.589 2004 11
#60: 5 2004-12-31 721.589 2004 12
#61: 6 2005-12-31 834.218 2005 1
#62: 6 2005-12-31 834.218 2005 2
#63: 6 2005-12-31 834.218 2005 3
#64: 6 2005-12-31 834.218 2005 4
#65: 6 2005-12-31 834.218 2005 5
#66: 6 2005-12-31 834.218 2005 6
#67: 6 2005-12-31 834.218 2005 7
#68: 6 2005-12-31 834.218 2005 8
#69: 6 2005-12-31 834.218 2005 9
#70: 6 2005-12-31 834.218 2005 10
#71: 6 2005-12-31 834.218 2005 11
#72: 6 2005-12-31 834.218 2005 12
# X Date Value year month
您可能需要设置 allow.cartesian = TRUE
。
我有 2000-2015 年 15 年的 GDP 年度数据。我想将此数据转换为只有月份和年份的月度数据。
我只想将那一年的值复制到所有月份。我怎么能在 R.e.g 中做到这一点2010 年的值为 1708。我想为 2010 年的所有月份复制相同的值。
我的数据:
> str(gdpnew)
'data.frame': 16 obs. of 3 variables:
$ X : int 1 2 3 4 5 6 7 8 9 10 ...
$ Date : Date, format: "2000-12-31" "2001-12-31" "2002-12-31" ...
$ Value: num 477 494 524 618 722 ...
> head(gdpnew)
X Date Value
1 1 2000-12-31 476.636
2 2 2001-12-31 493.934
3 3 2002-12-31 523.768
4 4 2003-12-31 618.369
5 5 2004-12-31 721.589
6 6 2005-12-31 834.218
>
显然你想要交叉连接:
DT <- read.table(text = " X Date Value
1 1 2000-12-31 476.636
2 2 2001-12-31 493.934
3 3 2002-12-31 523.768
4 4 2003-12-31 618.369
5 5 2004-12-31 721.589
6 6 2005-12-31 834.218", header = TRUE)
library(data.table)
setDT(DT)
DT[, Date := as.IDate(Date)]
DT[, year := year(Date)]
setkey(DT, year)
DT1 <- DT[CJ(year, month = 1:12)]
print(DT1)
# X Date Value year month
# 1: 1 2000-12-31 476.636 2000 1
# 2: 1 2000-12-31 476.636 2000 2
# 3: 1 2000-12-31 476.636 2000 3
# 4: 1 2000-12-31 476.636 2000 4
# 5: 1 2000-12-31 476.636 2000 5
# 6: 1 2000-12-31 476.636 2000 6
# 7: 1 2000-12-31 476.636 2000 7
# 8: 1 2000-12-31 476.636 2000 8
# 9: 1 2000-12-31 476.636 2000 9
#10: 1 2000-12-31 476.636 2000 10
#11: 1 2000-12-31 476.636 2000 11
#12: 1 2000-12-31 476.636 2000 12
#13: 2 2001-12-31 493.934 2001 1
#14: 2 2001-12-31 493.934 2001 2
#15: 2 2001-12-31 493.934 2001 3
#16: 2 2001-12-31 493.934 2001 4
#17: 2 2001-12-31 493.934 2001 5
#18: 2 2001-12-31 493.934 2001 6
#19: 2 2001-12-31 493.934 2001 7
#20: 2 2001-12-31 493.934 2001 8
#21: 2 2001-12-31 493.934 2001 9
#22: 2 2001-12-31 493.934 2001 10
#23: 2 2001-12-31 493.934 2001 11
#24: 2 2001-12-31 493.934 2001 12
#25: 3 2002-12-31 523.768 2002 1
#26: 3 2002-12-31 523.768 2002 2
#27: 3 2002-12-31 523.768 2002 3
#28: 3 2002-12-31 523.768 2002 4
#29: 3 2002-12-31 523.768 2002 5
#30: 3 2002-12-31 523.768 2002 6
#31: 3 2002-12-31 523.768 2002 7
#32: 3 2002-12-31 523.768 2002 8
#33: 3 2002-12-31 523.768 2002 9
#34: 3 2002-12-31 523.768 2002 10
#35: 3 2002-12-31 523.768 2002 11
#36: 3 2002-12-31 523.768 2002 12
#37: 4 2003-12-31 618.369 2003 1
#38: 4 2003-12-31 618.369 2003 2
#39: 4 2003-12-31 618.369 2003 3
#40: 4 2003-12-31 618.369 2003 4
#41: 4 2003-12-31 618.369 2003 5
#42: 4 2003-12-31 618.369 2003 6
#43: 4 2003-12-31 618.369 2003 7
#44: 4 2003-12-31 618.369 2003 8
#45: 4 2003-12-31 618.369 2003 9
#46: 4 2003-12-31 618.369 2003 10
#47: 4 2003-12-31 618.369 2003 11
#48: 4 2003-12-31 618.369 2003 12
#49: 5 2004-12-31 721.589 2004 1
#50: 5 2004-12-31 721.589 2004 2
#51: 5 2004-12-31 721.589 2004 3
#52: 5 2004-12-31 721.589 2004 4
#53: 5 2004-12-31 721.589 2004 5
#54: 5 2004-12-31 721.589 2004 6
#55: 5 2004-12-31 721.589 2004 7
#56: 5 2004-12-31 721.589 2004 8
#57: 5 2004-12-31 721.589 2004 9
#58: 5 2004-12-31 721.589 2004 10
#59: 5 2004-12-31 721.589 2004 11
#60: 5 2004-12-31 721.589 2004 12
#61: 6 2005-12-31 834.218 2005 1
#62: 6 2005-12-31 834.218 2005 2
#63: 6 2005-12-31 834.218 2005 3
#64: 6 2005-12-31 834.218 2005 4
#65: 6 2005-12-31 834.218 2005 5
#66: 6 2005-12-31 834.218 2005 6
#67: 6 2005-12-31 834.218 2005 7
#68: 6 2005-12-31 834.218 2005 8
#69: 6 2005-12-31 834.218 2005 9
#70: 6 2005-12-31 834.218 2005 10
#71: 6 2005-12-31 834.218 2005 11
#72: 6 2005-12-31 834.218 2005 12
# X Date Value year month
您可能需要设置 allow.cartesian = TRUE
。