R语言使用dplyr实现Excel Index-Match功能填充hourx空值
R dplyr实现多条件匹配填充空值(等效Excel Index-Match)
我们可以通过dplyr的左连接(left_join)实现多条件匹配,核心是将两个数据集共有的非hourx字段作为匹配键,从源数据mydata中取出对应hourx值填充到目标表中。
方案1:适用于目标表hourx全为NA的场景(最简实现)
直接删除目标表中原有的全空hourx列,再通过左连接匹配源数据的hourx:
# 加载dplyr包 library(dplyr) # 核心匹配填充逻辑 mydata.result <- mydata.result %>% # 移除原表全为NA的hourx列 select(-hourx) %>% # 以所有共有字段为匹配键,左连接取源数据的hourx left_join( mydata %>% select(datex, seller, product, detail, status, channel, transaction, hourx), by = c("datex", "seller", "product", "detail", "status", "channel", "transaction") )
方案2:适用于目标表hourx部分有值的场景
用coalesce函数保留原有非空值,仅填充NA值,不会覆盖已存在的有效数据:
library(dplyr) mydata.result <- mydata.result %>% left_join( # 重命名源数据的hourx避免和目标表列名冲突 mydata %>% select(datex, seller, product, detail, status, channel, transaction, hourx) %>% rename(hourx_match = hourx), by = c("datex", "seller", "product", "detail", "status", "channel", "transaction") ) %>% # 原有值非空则保留,为空则用匹配到的值填充 mutate(hourx = coalesce(hourx, hourx_match)) %>% # 删除辅助匹配列 select(-hourx_match)
注意事项
- 匹配键
by参数的字段顺序可以任意,只要保证两个表的匹配字段名完全一致即可 - 如果源数据中存在同一个匹配键对应多个不同hourx的情况,可在源数据侧添加
distinct()去重,避免左连接后产生多余行
内容的提问来源于stack exchange,提问作者Faryan
相关产品推荐
相关产品推荐

