我有两个数据框架,其中包含具有各自日期的行条目。数据框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.x
和A.y
两列,这是不期望的。
试试下面的代码
dfout <- unique(rbind(df1,df2))
dfout <- dfout[order(dfout$dates),]
合并df1
和df2
,如果在两个数据框中都有重复的日期,则使用mean
和A
的值,并使用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_by
和distinct
的重复项。
library(dplyr)
df <- bind_rows(df1, df2) %>%
group_by(dates, A) %>%
distinct(dates)
编辑:这将不工作,如果你有数据帧之间的数据不同意在一个单一的日期。如果你有两条关于1/1/15的记录,它们有不同的A
值,它们都将被保留。