对数据进行填补
今天整理数据的时候,需要使用数据集 2 对数据集 1 里缺失的部分进行填补,而两者重复的部分,优先保留数据集 1 里的。
这个问题其实很简单,只需短短 2-3 行:
result <- data1 %>%
left_join(data2) %>%
mutate(value = ifelse(is.na(value.x), value.y, value.x))
但我遇到的问题稍微多一点点难度,日期的序列不是连续的话,例如数据集 1:
# date value
# 2014-01-01 12
# 2014-01-03 14
# 2014-01-05 17
数据集 2:
# date value
# 2014-01-02 13
# 2014-01-03 16
# 2014-01-04 15
那么希望得到的结果是:
# date value
# 2014-01-01 12
# 2014-01-02 16
# 2014-01-03 14
# 2014-01-04 15
# 2014-01-05 17
我们会需要先生成一个日期的模板:
template <- tibble(
date = seq(as.Date("2013/1/1"), as.Date("2017/12/31"), "days"
)
template %>%
left_join(data1, by="date") %>%
left_join(data2, by-"date") %>%
mutate(value = ifelse(is.na(value.x), value.y, value.x))
当然,如果数据维度上升,比如多了一个城市维度的话,只需要在模板上更改一下也能解决了:
template <- tibble(
city = rep(city_codes, each=len1),
date = rep(seq(as.Date("2013/1/1"), as.Date("2017/12/31"), "days"), len2)
)
template %>%
left_join(data1, by=c("date", "city")) %>%
left_join(data2, by-c("date", "city")) %>%
mutate(value = ifelse(is.na(value.x), value.y, value.x))
这里需要注意生成模板的两个变量重复的次数和参数设置,另外下面的合并键也要加入新的变量。