r - 如何使用非每天采集的数据创建每日时间序列
问题描述
我有一个这样写的csv文件
Date Data
1/5/1980 25
1/7/1980 30
2/13/1980 44
4/13/1980 50
我希望 R 产生这样的东西
Date Date
1/1/1980
1/2/1980
1/3/1980
1/4/1980
1/5/1980 25
1/6/1980
1/7/1980 30
然后我希望 R 像这样将最后的观察结果向前推进
Date Date
1/1/1980
1/2/1980
1/3/1980
1/4/1980
1/5/1980 25
1/6/1980 25
1/7/1980 30
我想要两个单独的 data.tables 创建一个仅包含实际数据的表,然后创建另一个包含最后一个观察结果的表。
感谢所有的帮助!
编辑:我还需要将填充的任何 NA 更改为 0
解决方案
你也可以使用tidyverse
:
library(tidyverse)
df %>%
mutate(Date = as.Date(Date, "%m/%d/%Y")) %>%
complete(Date = seq(as.Date(format(min(Date), "%Y-%m-01")), max(Date), by = "day")) %>%
fill(Data) %>%
replace(., is.na(.), 0)
前 10 行:
# A tibble: 104 x 2
Date Data
<date> <dbl>
1 1980-01-01 0
2 1980-01-02 0
3 1980-01-03 0
4 1980-01-04 0
5 1980-01-05 25
6 1980-01-06 25
7 1980-01-07 30
8 1980-01-08 30
9 1980-01-09 30
10 1980-01-10 30
我以最小日期的月份和年份的第一天为起点,最大日期为最大值;这当然可以根据需要进行调整。
编辑:@Sotos 对更简洁的方法有更好的建议(通过更好地使用format
参数):
df %>%
mutate(Date = as.Date(Date, "%m/%d/%Y")) %>%
complete(Date = seq(as.Date(format(min(Date), "%Y-%m-01")), max(Date), by = "day")) %>%
fill(Data)