【发布时间】:2020-06-28 20:27:33
【问题描述】:
下午好,
我正在分析给定月份的观察分布,例如:
日期观察
2010-01 10
2010-03 15
2010-05 16
问题:如何在表中插入缺失的日期(2010-02 和 2010-05)(使用包含所有月度日期的其他表)并将 0 属性作为观察值。
提前致谢。
【问题讨论】:
下午好,
我正在分析给定月份的观察分布,例如:
日期观察
2010-01 10
2010-03 15
2010-05 16
问题:如何在表中插入缺失的日期(2010-02 和 2010-05)(使用包含所有月度日期的其他表)并将 0 属性作为观察值。
提前致谢。
【问题讨论】:
我们将'Date'转换为Date类,然后使用complete通过获取min/max或first、last'Date'by'1个月'的序列来扩展数据集,而filling '观察'与 0
library(tidyr)
library(dplyr)
df1 %>%
mutate(Date = as.Date(Date)) %>%
complete(Date = seq(first(Date), last(Date), by = '1 month'),
fill = list(Observations = 0))
如果有另一个具有完整“日期”的数据集,那么显而易见的选项是 left_join,然后将“观察”中的 NA 元素替换为 0,因为默认情况下,如果我们没有匹配项,它将填写NA
left_join(df2, df1, by = 'Date') %>%
mutate(Observations = replace_na(Observations, 0))
注意:df2 是具有完整“日期”的数据集
如果“df2”还有其他列,我们不需要select那些列
left_join(df2 %>%
select(Date), df1) %>%
mutate(Observations = replace_na(Observations, 0))
在base R,我们可以使用merge
transform(merge(df2, df1, by = 'Date', all.x = TRUE),
Observations = replace(Observations, is.na(Observations), 0))
【讨论】: