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

时间:2016-06-03 17:49:51

标签: r function dataframe na

以下是我的数据的示例:

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))

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

最终结果应为

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

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

1 个答案:

答案 0 :(得分:2)

我们可以使用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)]