我有一个数据集代表了一个中央银行参数(印度中央银行的LAF走廊的宽度,RBI),从2011年4月1日到2011年3月。现在,这个数据集看起来像这样:
| 27/04/2001 - 29/04/2001 | 225 |
| 30/04/2001 - 27/05/2001 | 200 |
| 28/05/2001 - 06/06/2001 | 225 |
| 07/06/2001 - 04/03/2002 | 200 |
.....
我想将此转换为时间序列数据集,其中包含LAF宽度条目,该数据集来自所研究的时间段(04/2001 - 03/2011)。如何将其转换为适当的时间序列?
答案 0 :(得分:1)
我想你的数据是df,有两列这样的?:
period <- c("27/04/2001 - 29/04/2001", "30/04/2001 - 27/05/2001",
"28/05/2001 - 06/06/2001", "07/06/2001 - 04/03/2002")
values <- (c(225, 200, 225, 200))
df <- data.frame(period, values)
然后我使用substr
命令为每个句点的开始日结束添加列,并添加该期间的总天数(方便检查完整性)
df$start <- as.Date(substr(df$period,1,10), "%d/%m/%Y")
df$end <- as.Date(substr(df$period,14,23), "%d/%m/%Y")
df$nodays <- df$end-df$start+1
接下来,我在一列中创建一个新的df,其中包含原始df中存在的所有日期,以及相应的LAF值。
LAF_date <- NULL
LAF_value <- NULL
for (i in 1:dim(df[1])){
tmp_date <- seq.Date(df$start[i],df$end[i], by="days")
LAF_date <- append(LAF_date, tmp_date)
tmp_value <- rep(df$values[i], length(tmp_date))
LAF_value <- append(LAF_value, tmp_value)
}
new_df <- data.frame(as.Date(LAF_date), LAF_value )
可能会有更快的方式,但今天我在回答Stackoverflow上的问题(腮红,脸红)时失去了童贞。希望你能用它。