通过R中的for循环进行方差数据分析

通过R中的for循环进行方差数据分析,r,for-loop,variance,R,For Loop,Variance,我试图通过for循环分析温度数据的变化,以便删除一些错误的雪数据。 其想法是,如果温度低于0°C,并且如果接下来3个值的方差超过0.1(此处的值仅用于示例),则不会是雪(但如果方差较弱,则可以);因此,我将这些数据的雪深设置为0。 我试着写一个小函数来实现它。没有错误,但什么也没有发生。我在for循环中的写入方式肯定不正确 data <- data.frame(temperature=c(1,2,0,-1,-5,-3,-4,-1,-1,-1),snow=c(3,4,5,10,

我试图通过for循环分析温度数据的变化,以便删除一些错误的雪数据。 其想法是,如果温度低于0°C,并且如果接下来3个值的方差超过0.1(此处的值仅用于示例),则不会是雪(但如果方差较弱,则可以);因此,我将这些数据的雪深设置为0。 我试着写一个小函数来实现它。没有错误,但什么也没有发生。我在for循环中的写入方式肯定不正确

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

data我建议使用rollpapply向data.frame添加列,然后使用ifelse检查列值

library(zoo)
#data$var3<- rollapply(data$snow, 3, var, fill=0, align="left")
data$var3 <- c(rollapply(data$snow, 3, var, align="left")[-1], rep(0,3))
data$snow3 <- ifelse(data$temp<0 & data$var3>0.1, 0, data$snow)

   temperature snow       var3 snow3
1            1    3 10.3333333     3
2            2    4 10.3333333     4
3            0    5  1.0000000     5
4           -1   10  0.3333333     0
5           -5   11  3.0000000     0
6           -3   12  3.0000000     0
7           -4   12  0.3333333     0
8           -1   15  0.0000000    15
9           -1   15  0.0000000    15
10          -1   16  0.0000000    16
图书馆(动物园)

#数据$var3最后,我的解决方案是:

library(zoo)

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

data$var3 <- NA
for (i in 1:nrow(data)) {
if(!is.na(data[i,1]) && (data[i,1]<0)) {
j=(i+3)
data[i,3] <- var(data[i:j,1])
}
}

data$snow3 <- ifelse(data$temperature<0 & data$var3>0.1, 0, data$snow)  
图书馆(动物园)

数据我不理解你对函数应该做什么的描述。您的功能如何产生预期的结果?如果将前三个“雪”值设置为零,则在移动窗口时,所有后续值都会出现巨大差异。另外,为什么在这里使用
mapply
?但最重要的是,你的整个方法在我看来非常可疑。如果你不相信你的一些雪的价值观,为什么你要相信其他人?为什么你相信他们都是零,因为你的方差标准?最多你可以将它们设置为NA。另外,如果你将负温度的雪设置为0,为什么不将正温度设置为0?谢谢你的评论@LyzandeR。我看了一下最后问的R-问题,这些问题还没有答案,但我没有找到一个我能用我的R-技能回答的问题。我只是偶尔使用R,我正在尽可能多地自己寻找问题的答案,这要感谢以前的问题和回答。我相信并希望回答我的问题也能帮助其他人,因为他们以后也会遇到同样的问题,并且会像我一样首先在谷歌上寻找答案。我认为@LyzandeR的意思是你问了一些问题,对于这些问题,您没有将任何答案标记为已接受。正如@jbaums所提到的,我的意思是您没有接受针对您的问题给出的任何答案。为了得到问题的答案,你不需要回答问题。请看一看这趟旅游。为了将(你的问题的)答案标记为已接受,你需要点击位于“人们的答案”的绿色勾号。谢谢@Chris s.的回答!这对我帮助很大!我刚改变了方差计算的方法,但我保留了你对我问题的其余建议。现在看来效果不错。做得好!
library(zoo)

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

data$var3 <- NA
for (i in 1:nrow(data)) {
if(!is.na(data[i,1]) && (data[i,1]<0)) {
j=(i+3)
data[i,3] <- var(data[i:j,1])
}
}

data$snow3 <- ifelse(data$temperature<0 & data$var3>0.1, 0, data$snow)