我有一个向量(我实际上只是检索了数据帧中的各个列),其中包含缺少的数据.我想用向量中的下一个可用数据(或下一个数据,如果下一个数据不可用)替换丢失的数据.所以,例如,
data <- c(NA, NA, NA, NA, 5, NA, NA, 7, NA, NA)
Run Code Online (Sandbox Code Playgroud)
应该成为
data <- c(5, 5, 5, 5, 5, 7, 7, 7, 7, 7)
Run Code Online (Sandbox Code Playgroud)
我知道这是填写缺失数据的一种非常具体的方法,但我想知道是否有一个优雅的解决方案.我尝试使用which(is.na(data))获取缺失的索引并which(!is.na(data))获取带有数据的索引,但是即使使用这两个索引列表操纵向量也需要很多混乱的逻辑.我想知道我是否which以任何方式滥用,或者是否有其他内置函数或软件包可以让我优雅地执行此逻辑.
谢谢您的帮助!
作为参考,只要向量不以一堆NA结束,下面的代码就可以工作,但我必须添加更多逻辑才能使它与原始数据集一起工作.
data <- c(NA, NA, NA, NA, 5, NA, NA, 7)
missingIndeces <- which(is.na(data))
filledIndeces <- which(!is.na(data))
if(length(missingIndeces) > 1) {
for(j in 1:length(data)) {
temp <- data[j:length(data)]
filledData <- which(!is.na(temp))
if(filledData[1] > 1)
data[j] <- temp[filledData[1]]
}
}
Run Code Online (Sandbox Code Playgroud)
也许用na.locf...?
library(zoo)
na.locf(na.locf(zoo(data),fromLast = TRUE,na.rm = FALSE),na.rm = FALSE)
1 2 3 4 5 6 7 8 9 10
5 5 5 5 5 7 7 7 7 7
Run Code Online (Sandbox Code Playgroud)