在表中添加观测值并给定观测值(联接)

时间:2020-06-28 20:27:33

标签: r date join

下午好,

我正在分析给定月份中观察值的分布,例如:

日期观察

2010-01 10

2010-03 15

2010-05 16

问题:如何在表格中插入缺失的日期(2010-02和2010-05)(使用带有所有月度日期的其他表格),并将0用作观察值。

谢谢。

1 个答案:

答案 0 :(得分:1)

我们将“日期”转换为Date类,然后使用complete通过获取min/maxfirstlast的序列来展开数据集在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))