R语言使用dplyr为dataframe创建填充H_Tower缺失值的diff新列
问题原因
你的代码无法实现连续填充有三个核心问题:
group_by(timestamp)属于多余操作,你数据中的timestamp每一行都是唯一值,分组后每行单独为一组,无法跨行获取更早的非NA值lag(H_Tower)只能获取相邻上一行的H_Tower值,如果上一行也是NA,返回的依旧是NA,自然只能填充紧邻NA的下一行- mutate调用时不需要重复写数据源名和列索引,dplyr管道操作中直接引用列名即可
正确实现方案
最简便的方式是配合tidyr包的fill()函数实现向下填充最近非NA值的需求,代码如下:
# 加载依赖包 library(dplyr) library(tidyr) data_glob3 <- data_glob3 %>% arrange(timestamp) %>% # 确保数据按时间正序排列 mutate(diff = H_Tower) %>% # 初始化diff列与H_Tower值一致 fill(diff, .direction = "down") # 向下填充diff列的NA值,默认使用最近的非NA值
如果不想额外引入tidyr包,也可以使用zoo包的na.locf()(last observation carried forward)函数实现同样效果:
library(dplyr) library(zoo) data_glob3 <- data_glob3 %>% arrange(timestamp) %>% mutate(diff = na.locf(H_Tower, na.rm = FALSE))
注意事项
如果你的数据集第一行的H_Tower就是NA值,上述方法会保留开头的NA值,如果需要处理开头的NA,可以根据需求补充规则设置默认初始值即可。
内容的提问来源于stack exchange,提问作者fb5802
相关产品推荐
相关产品推荐

