Я пытаюсь проанализировать дисперсию данных температуры через цикл for, чтобы удалить некоторые неверные данные о снеге. Идея состоит в том, что если температура ниже 0 ° C, и если дисперсия следующих трех значений составляет более 0,1 (значения здесь только для примера), это не может быть снег (но если дисперсия слабее, это нормально); поэтому я установил для этих данных глубину снега до 0. Я попытался написать небольшую функцию, чтобы сделать это. Ошибок нет, но ничего не происходит. Мой способ записи внутри цикла должен быть неправильным.Анализ данных дисперсии с помощью цикла for в R
data <- data.frame(temperature=c(1,2,0,-1,-5,-3,-4,-1,-1,-1),snow=c(3,4,5,10,
11,12,12,15,15,16))
plant <- function(x,y){
for (j in 1:length(x))
{ if(!is.na(x[j]) && !is.na(x[(j+3)]) && (x[j]<0)
&& (x[(j+3)]<0) && (var(x[j:(j+3)])>0.1))
{y[j:(j+3)] <- 0 }
}
return(y)
}
data[,2] <- mapply(plant,data[,1],data[,2])
Мои окончательные данные (в данном примере) должен выглядеть следующим образом:
finaldata <- data.frame(temperature=c(1,2,0,-1,-5,-3,-4,-1,-1,-1),
snow=c(3,4,5,0,0,0,0,15,15,16))
Что случилось моя функция? Как я могу сделать это легко?
Я не понимаю, описание того, что вы функция должна делать точно. Каким образом ваша функция может привести к предполагаемому результату? Если он устанавливает первые три значения снега в ноль, у вас будет огромная дисперсия для всех последующих значений с вашим движущимся окном. Кроме того, почему вы используете 'mapply' здесь? Но самое главное, весь ваш подход кажется мне очень подозрительным. Если вы не доверяете некоторым своим значениям снега, почему вы доверяете другим? И почему вы считаете, что все они равны нулю из-за вашего критерия дисперсии? В лучшем случае вы можете уйти, установив их в NA. – Roland
Кроме того, если вы установите снег на 0 для отрицательных температур, почему бы не использовать положительные температуры? – Roland
Благодарим вас за замечание @LyzandeR. Я посмотрел на последние заданные R-вопросы, у которых пока нет ответов, но я не нашел того, на что я смог ответить своими R-навыками. Я иногда использую R, и я стараюсь найти ответ на свой вопрос как можно больше, благодаря более старым вопросам и ответам. Я верю и надеюсь, что ответ на мой вопрос может помочь другим людям позже, когда у них будет такая же проблема, и будет искать ответ, как я, сначала на google. – jeff6868