3

我想使用年月末日期索引(即 1989-12-31)将 df 转换为 xts。我在网上搜索但没有答案。感谢并感谢您的帮助。

df <- read.table(textConnection("
date    a     b      c     d 
198912 29.46 13.47 32.52 22.06 
199001 36.35 17.30 38.14 24.98 
199002 33.72 15.57 38.14 23.61 
199003 30.76 14.01 34.74 21.73 
"),header=T)
4

2 回答 2

4

使用yearmon类,然后as.Date.yearmon引用help('yearmon')

as.Date.yearmon 和 as.yearmon.yearqtr 每个都有一个可选的第二个参数“frac”,它是一个介于 0 和 1 之间的数字(包括 0 和 1),表示通过结果所代表的周期的分数。默认值为 0,表示周期的开始。

as.Date(as.yearmon(as.character(df$date), format = '%Y%m'), frac=1)
## [1] "1989-12-31" "1990-01-31" "1990-02-28" "1990-03-31"
于 2013-07-05T01:38:08.987 回答
3

笑着说,这是一个基本的 R 方法,这无疑是非常丑陋的:

Reduce(c,
 lapply(
  as.Date(paste0("1-",as.character(df$date)),format="%d-%Y%m"),
  function(x) seq.Date(x,length=2,by="1 month")[2] - 1
 )
)

[1] "1989-12-31" "1990-01-31" "1990-02-28" "1990-03-31"
于 2013-07-05T02:00:37.843 回答