dplyr full_join合并后如何实现行值循环复用填充NA
实现方案
你需要的前序有效值填充NA的需求,可以直接使用tidyverse生态下tidyr包的fill()函数完成,该函数默认就是向下填充,匹配你要求的「复用前序行有效值直到该列出现下一个有效值」的逻辑。
完整可运行代码如下:
# 加载所需tidyverse包 library(dplyr) library(tidyr) set.seed(19) # 构造模拟数据 x <- data.frame(time = rnorm(length(month.name))^2, month = month.name) y <- data.frame(time = rnorm(length(LETTERS))^2, letters = LETTERS) # 合并+排序+填充NA全流程 z2 <- full_join(x, y, by = "time") %>% arrange(time) %>% # 仅填充month列,默认向下填充 fill(month)
补充说明
- 如果你需要填充多列,直接在
fill()中传入对应列名即可,多个列名用逗号分隔:fill(col1, col2, col3) - 如果你需要填充所有列,可以用
fill(everything()) - 你可以通过
.direction参数调整填充方向:可选值为down(默认,前向填充)、up(后向填充)、downup、updown,当前需求使用默认值即可。
内容的提问来源于stack exchange,提问作者eartoolbox
相关产品推荐
相关产品推荐

