合并 R 中的两个数据帧而不重复输入

Combine two data frames in R without repeated entries

我有两个数据框,其中包含具有相应日期的行条目。数据框 1 包含从 2010 年到 2017 年收集的观察结果。

   dates       A
 2010-01-01   21
 2010-01-02   27
 2010-01-03   34
...
 2017-12-29   22
 2017-12-30   32
 2017-12-31   25

数据框 2 包含从 2015 年到 2020 年收集的观察结果。

  dates        A
 2015-01-01   20
 2015-01-02   29
 2015-01-03   34
...
 2020-12-29   22
 2020-12-30   27
 2020-12-31   32

这两个数据框都缺少了几天的观测值。我希望结合两个数据框来填补缺失的数据,并获得到 2020 年的完整时间序列,而无需任何重复条目。像下面的数据框:

   dates       A
 2010-01-01   21
 2010-01-02   27
 2010-01-03   34
 ...
 2020-12-29   22
 2020-12-30   27
 2020-12-31   32

使用 merge(df1, df2, by = 'dates')full_join(df1, df2, by = 'dates') 创建重复条目或两列 A.xA.y,这不是预期的。

如果您的 df 实际上只有两列,您应该能够 bind_rowsgroup_bydistinct 删除重复项。

library(dplyr)
df <- bind_rows(df1, df2) %>%
   group_by(dates, A) %>%
   distinct(dates)

编辑:如果您的数据在单个日期的数据帧之间不一致,这将不起作用。如果您有两条 1/1/15 的记录并且它们具有不同的 A 值,那么它们都将被保留。

试试下面的代码

dfout <- unique(rbind(df1,df2))
dfout <- dfout[order(dfout$dates),]

合并 df1df2,如果在两个数据帧 meanA 值中都存在重复日期,并使用 complete填写缺失的日期。

library(dplyr)
library(tidyr)

df1 %>%
  bind_rows(df2) %>%
  mutate(dates = as.Date(dates)) %>%
  group_by(dates) %>%
  summarise(A = mean(A)) %>%
  complete(dates = seq(min(date), max(date), by = 'day'))