Я должен решить эту проблему, используя l oop в R (я знаю, что вы можете сделать это намного проще без циклов, но это для школы ...).
Так что у меня есть вектор с NA следующим образом:
trades<-sample(1:500,150,T)
trades<-trades[order(trades)]
trades[sample(10:140,25)]<-NA
, и мне нужно создать FOR l oop, который заменит NA на среднее от 2 чисел до NA и 2 чисел, следующих за NA.
Это я могу сделать с l oop вот так:
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, то вы должны заменить NA средним значением из 4 предыдущих и 4 следующих чисел (я предполагаю, что удаление NA). Но я просто не могу его взломать ... У меня лучшие результаты с этим l oop:
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.
Спасибо за ваш помогите заранее.