根据另一列中的值将函数应用于列中的 NA 值

applying function to NA values in a column based on values in another column

这是我的数据的示例:

pupilsize <- c(500, 400, NA, NA, 100, 600, 500, NA, NA, NA, 500) 
rlelength <- c(4,4,2,2,6,6,6,90,90,90,50)
data <- data.frame(cbind(pupilsize,rlelength))

如果 data$rlelength 中的数字小于 86,我想将 na.approx 函数应用于 data$pupilsize 中的 NA 值块 only

最终结果应该是

data$pupilsize
[1] 500 400 300 200 100 600 500  NA  NA  NA 500

我在分割我想要的 NA 值的块时遇到了很多麻烦。非常感谢任何帮助!

我们可以使用ifelse

data$pupilsize <- with(data, ifelse(rlelength< 86, na.approx(pupilsize), pupilsize))
data$pupilsize
#[1] 500 400 300 200 100 600 500  NA  NA  NA 500

i1 <- data$rlelength < 86
data$pupilsize[i1] <- na.approx(data$pupilsize[i1])

或者我们可以使用data.table方法提高效率。

library(data.table)
setDT(data)[rlelength < 86, pupilsize := na.approx(pupilsize)]