我有一个包含4列数据的csv文件。我需要从csv文件中选择第一列,我喜欢这样:
file1<-read.csv("file1.csv",header=TRUE)
x<-file[,1]
第一列包含(x,此处)包含行号。
x
5
10
54
177
178
182
183
184
185
203
204
205
206
207
208
现在还有另一个csv文件,其中包含一列365行数据
y<-read.csv("data.csv",header=TRUE)
y
0
2.3
0.5
21
0
.
.
.
9.5 #total 365 numbers
这就是我打算做的事情:
1)从x开始,选择第一个数字(即5)
2)在y中,选择相应的第5个数据点(为0)和之前的4个数据点(为21,0.5,2.3,0),然后分别测试以下条件
条件1:从5个数据点开始,如果五个中的三个是> 0,然后打印5(步骤1的结果)
条件2:如果五个中的全部四个都> 0,则再次打印5
条件3:如果五个中的全部都是> 0,则再次打印5
但是,如果满足三个条件,只满足前两个条件而不满足第三个条件,则从x中选择第二个数字(本例中为10)并再次选择y中相应的第10个数据点和4个数据在它之前的点(第6,7,8和9)并评估它们的第三个条件(即如果所有五个数字 - 第6,7,8,9和10都是> 0,我不需要评估第一个和x)中前一个数字已满足的第二个条件,然后保存10并停止。
对于我的一个虚弱的头脑来说这听起来很复杂(从我的声誉可以看出),并且希望有人能告诉我如何在R中这样做。
非常感谢
答案 0 :(得分:1)
听起来你需要一个while循环。
file1 <- data.frame(x=seq(5, 205, by=5))
file1
x <- file1[, 1]
set.seed(123)
file2 <- data.frame(y=rnorm(365))
y <- file2[, 1]
# flags for each condition
cond1 <- FALSE
cond2 <- FALSE
cond3 <- FALSE
k <- 0
while(!cond3) {
k <- k + 1
# select first number
num <- x[k]
# select all y's up to data point
all.y <- y[(num-4):num]
# number of positive values
chk.pos <- length(which(all.y > 0))
# condition 1: check if 3 of 5 are positive
cnt <- 0
if (!cond1 & chk.pos >= 3) {
cnt <- cnt + 1
cond1 <- TRUE
print(num)
}
# condition 2: check if 4 of 5 are positive
if (!cond2 & chk.pos >= 4) {
cnt <- cnt + 1
cond2 <- TRUE
print(num)
}
# condition 3: check if 5 of 5 are positive
if (!cond3 & chk.pos == 5) {
cnt <- cnt + 1
cond3 <- TRUE
print(num)
}
}
对我来说
[1] 5
[1] 15
[1] 70