【发布时间】:2020-04-23 11:42:00
【问题描述】:
我必须在 R 中使用循环来解决这个问题(我知道你可以在没有循环的情况下更轻松地做到这一点,但它适用于学校......)。
所以我有这样的 NA 向量:
trades<-sample(1:500,150,T)
trades<-trades[order(trades)]
trades[sample(10:140,25)]<-NA
我必须创建一个 FOR 循环,它将 NA 替换为 NA 之前的 2 个数字和 NA 之后的 2 个数字的平均值。
这是我能够做到的,使用这样的循环:
for (i in 1:length(trades)) {
if (is.na(trades[i])==T) {
trades[i] <- mean(c(trades[c(i-1:2)], trades[c(i+1:2)]), na.rm = T)
}
}
但是作业还有另一部分。如果在前面的 2 个或后面的 2 个数字中有 NA,那么你必须用前面的 4 个数字和后面的 4 个数字的平均值替换 NA(我假设删除了 NA)。但我就是无法破解它......我在这个循环中得到了最好的结果:
for (i in 1:length(trades)) {
if (is.na(trades[i])==T && is.na(trades[c(i-1:2)]==T || is.na(trades[c(i+1:2)]==T))) {
trades[i] <- mean(c(trades[c(i-1:4)], trades[c(i+1:4)]), na.rm = T)
}else if (is.na(trades[i])==T){
trades[i] <- mean(c(trades[c(i-1:2)], trades[c(i+1:2)]))
}
}
但它仍然错过了一些 NA。
提前感谢您的帮助。
【问题讨论】: