下午好,
我正在分析给定月份中观察值的分布,例如:
日期观察
2010-01 10
2010-03 15
2010-05 16
问题:如何在表格中插入缺失的日期(2010-02和2010-05)(使用带有所有月度日期的其他表格),并将0用作观察值。
谢谢。
答案 0 :(得分:1)
我们将“日期”转换为Date
类,然后使用complete
通过获取min/max
或first
,last
的序列来展开数据集在by
的“观察”中加0的日期为fill
“ 1个月”
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
,然后将“ Observations”中的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))