将R中的两个数据帧合并,不重复条目



我有两个数据框架,其中包含具有各自日期的行条目。数据框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两列,这是不期望的。

试试下面的代码

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'))

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

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

编辑:这将不工作,如果你有数据帧之间的数据不同意在一个单一的日期。如果你有两条关于1/1/15的记录,它们有不同的A值,它们都将被保留。

最新更新