gpt4 book ai didi

r - 将 ifelse 测试应用于以前的值?

转载 作者:行者123 更新时间:2023-12-04 04:50:14 24 4
gpt4 key购买 nike

我需要做的是测试 data.frame 的前 n 行数(比如 5 表示一个不错的整数)。 .这对一个人来说真的很容易,它在哪里

for (i in 1:nrow(data)){
ifelse(((data$V1[i]>(mean(data$V1)+2*sd(data$V1))) &
(data$V1[i-1]>(mean(data$V1)+2*sd(data$V1)))),Control[i,1]<-1,Control[i,1]<-0)
}

这是有效的,如果测试为真,则 Control 填充为 1,如果为假,则填充为 0。

但是,我想在过去将它扩展到更多,我尝试使用嵌套的 for 来做,如下所示:
for (i in 1:nrow(data$V1)){ifelse((data$V1[i]>(mean(data$V1)+sd(data$V1))) &
(for (j in 1:4){(data$V1[(i-j)]>(mean(data$V1)+sd(data$V1)))},
Control[i,1]<-1,Control[i,1]<-0)}

这给出了以下错误(为简单起见,我使用单个值向量进行测试,称为 test ):
Error: unexpected ',' in "for (i in 1:length(test)){ifelse((test[i]>(mean(test)+sd(test))) & (for (j in 1:4){(test[(i-j)]>(mean(test)+sd(test)))},"

尝试用一些括号填充它会产生以下略有不同的错误:
Error: unexpected ')' in "for (i in 1:length(test)){ifelse((test[i]>(mean(test)+sd(test))) & (for (j in 1:4){(test[(i-j)]>(mean(test)+sd(test))))"
test定义如下:
test <- c(4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 
4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
4, 4, 4, 4, 8, 8, 7, 7)

非常欢迎对我的方法或更有效的 R 方法(我仍然是该语言的新手!)的任何帮助。

最佳答案

我想你需要 rollapply来自 zoo包裹。但是不清楚您如何定义循环,因为您使用 data ? Control并且在测试对象中给出错误......在这里我检查当前值和4个先前值是否都小于某个值(异常值)。无需使用ifelse这里因为条件不是向量。

test <- c(4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 
4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
4, 4, 4, 4, 8, 8, 7, 7)
library(zoo)
V <- mean(test)+2*sd(test)
rollapply(test,5,function(x)if(all(x>V)) 1 else 0)

关于r - 将 ifelse 测试应用于以前的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17561845/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com