R:将数月的多列数据帧转换为一个连续的时间序列

标签 r dataframe time-series reshape

我已将 .csv 文件读入 R 的 data.frame 对象中。该对象包含一列包含年份数字,一列包含日期数字,其余为每日测量值,分为每月不同的列,如下所示:

> new_stn
   year day JAN FEB MAR APR MAY JUN JUL AUG SEP OCT NOV DEC
1  1970   1   0   4   0   0   0   2   0   0   0   6  10   0
2  1970   2   0   0   0   0   0   2   0   0   6   6   4   0
3  1970   3   0   0   0   0   0  12   0   6   0  14   3   1
4  1970   4   0   4   0   1   2   0   0   0   6   3   2   0
5  1970   5   0   2   0   0   5   0   0   3   0  14   3   0
6  1970   6   0   0  12   0   3   2   0   4   3  NA   0   0
7  1970   7   1  23  13   2   0   5  10   3   0  NA   3   0
8  1970   8   7   0   0  13   3   1   1   2   0   8   2   0
9  1970   9   1   2   0   6   0   2   2   2   0   4  16   0
10 1970  10  13   0   0  36   0   8   0   4   5   0   7   3
11 1970  11   0   0   0   1   6   0   0   0   0   0  13   3
12 1970  12   6   3   0   0   0   5   0   0   0   0   0   0
13 1970  13   0   4   0   0   6   4   0   0   0   0  11   0
14 1970  14  10   0   0  10   0  10   0   0  NA   2   0   0
15 1970  15   1   0   0  18   0   0   0   2  NA   2   9   0
16 1970  16   0   5   0   6  16   1   5   2  NA   0   1   0
17 1970  17   0   1   0   0  10   0   2   0  NA   0   0   0
18 1970  18   0   4   0   0  10   0   0  16  NA   0   7   0
19 1970  19   0   1   0   0   4   0   8   0  NA   2   0   0
20 1970  20   0   0   0   0  22   3   6   0  NA   0   0   0
21 1970  21   0   1   0   0   0  14   2   2   9   0   0   0
22 1970  22   0   0   0   0   2   0   0   0   7   5   1   0
23 1970  23   0   0   0   0   0   0   0   4  24  26   2   0
24 1970  24   2   9   0   0   2   0   0   0   1   9   8   0
25 1970  25   0   0   0   0   2  11   0   0   0  NA  15   0
26 1970  26   0   7   2   2   5   2   0   2   0  NA   0  35
27 1970  27   0   6   0   1   2  NA   1   0   0  NA   0   0
28 1970  28   0   0   0   5   1  NA   7   0  18  16   0   0
29 1970  29   0  NA   0   9   0   0   0   0  32   0   9   0
30 1970  30   4  NA   0   0  16   0   6   0   4   4   0   0
31 1970  31   5  NA   0  NA   1  NA   0   0  NA  12  NA   4

如何将其转换为一个连续的时间序列?

我的主要问题是在考虑日期属性(例如闰年、日历日等)的同时进行 reshape 。如下所示:

> ns
           obs
1970-01-01   0
1970-01-02   0
1970-01-03   0
1970-01-04   0
1970-01-05   0
1970-01-06   0
1970-01-07   1
1970-01-08   7
1970-01-09   1
1970-01-10  13

提前致谢,并对冗长的示例表示歉意。

最佳答案

首先,将数据帧从宽格式融化为长格式。

library(reshape2)
df.long<-melt(new_stn,id.vars=c("year","day"),
              variable.name="month",value.name="obs")

然后添加新列 dat,其中包含由 yeardaymonth 列生成的日期。如果日期不切实际,函数 as.Date() 将生成 NA。

df.long<-transform(df.long,dat=as.Date(paste(year,day,month,sep="/"),"%Y/%d/%B"))

删除日期列中包含 NA 的行。

df.long<-df.long[!is.na(df.long$dat),]

关于R:将数月的多列数据帧转换为一个连续的时间序列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16235768/

相关文章:

r - 使用shinyFiles上传文件

r - 基于指标的条件总和

r - 如何四舍五入矩阵中的所有值?

python - 连接两个数据框的模糊匹配

python - 添加特定日期之前的天数作为列

r - 转置矩阵 R

python - 使用变量在循环中从 DataFrame 中提取数据

python - 将数据帧拆分为多个,具有重叠行

python - Pandas 将多个数据帧与时间戳索引对齐

python - 时间序列数据的滑动窗口训练/测试分割