Ashwini Patil
2016-Dec-04 10:08 UTC
[R] R for skip to the next row if condition met and then another condition to check
I have a dataset with many rows and columns. Below is a sample: V7 V8 V90 1 0-1 1 -1-1 1 -1-1 0 -1-1 0 -1-1 0 -1-1 0 -1-1 1 -10 1 -10 1 -1-1 0 00 0 00 0 00 0 00 0 00 -1 00 -1 -10 0 00 1 00 0 0 This data is saved in a matrix trboot3 What I want to do is create a loop whereby two conditions are checked and data is altered. 1. If there is a zero, skip to the next row. 2. If there is same number one below another in a row, keep the first number and change the rest to zero. Here is my code for the above loop: trboot4<-trboot3 valboot<-length(trboot3[,1])for (k in 1:length(trboot3[1,])){ for (i in 2:valboot-1){ if (trboot3[k,i]==0) {i<-i+1} else{ if(trboot3[k,i] == trboot3[k,i+1]){ for (j in i+1:valboot){ if(trboot3[k,j] =trboot3[k,i]){trboot4[k,j]<-0}else{break} if(j==valboot){break} } } } }} I want to save the new matrix in trboot4 basically the above sample should become: V7 V8 V90 1 0-1 0 -10 0 00 0 00 0 00 0 00 0 00 1 00 0 00 0 0-1 0 00 0 00 0 00 0 00 0 00 -1 00 0 -10 0 00 1 00 0 0 Thank you! [[alternative HTML version deleted]]
Rui Barradas
2016-Dec-04 11:59 UTC
[R] R for skip to the next row if condition met and then another condition to check
Hello, Please post in plain text not in HTML, like the posting guide asks you to. To give a data example use ?dput, like this: dput(head(trboot3, 20)) # paste the output of this in your mail If you have a sample of trboot4 please also use dput to post it. Finally, I don't understand your second condition, what does "same number one below another in a row" mean? Is it "below" (different rows) or in the same row? And you say to keep the first and change the rest. Once again, is it the rest of the row? Anyway I believe I have already found a problem in your code. In for (i in 2:valboot-1) you should try to see what exactly is 2:valboot-1. [Tip: it starts with a 1] Maybe you meant 2:(valboot-1). Rui Barradas Em 04-12-2016 10:08, Ashwini Patil escreveu:> I have a dataset with many rows and columns. Below is a sample: > > V7 V8 V90 1 0-1 1 -1-1 1 -1-1 0 -1-1 0 -1-1 0 > -1-1 0 -1-1 1 -10 1 -10 1 -1-1 0 00 0 00 0 00 > 0 00 0 00 -1 00 -1 -10 0 00 1 00 0 0 > > This data is saved in a matrix trboot3 What I want to do is create a loop > whereby two conditions are checked and data is altered. > > 1. If there is a zero, skip to the next row. > 2. If there is same number one below another in a row, keep the first > number and change the rest to zero. > > Here is my code for the above loop: > > trboot4<-trboot3 > valboot<-length(trboot3[,1])for (k in 1:length(trboot3[1,])){ > for (i in 2:valboot-1){ > if (trboot3[k,i]==0) {i<-i+1} > else{ > if(trboot3[k,i] == trboot3[k,i+1]){ > for (j in i+1:valboot){ if(trboot3[k,j] => trboot3[k,i]){trboot4[k,j]<-0}else{break} > if(j==valboot){break} > } > } > } > }} > > I want to save the new matrix in trboot4 > > basically the above sample should become: > > V7 V8 V90 1 0-1 0 -10 0 00 0 00 0 00 0 00 0 > 00 1 00 0 00 0 0-1 0 00 0 00 0 00 0 00 > 0 00 -1 00 0 -10 0 00 1 00 0 0 > > > Thank you! > > [[alternative HTML version deleted]] > > ______________________________________________ > R-help at r-project.org mailing list -- To UNSUBSCRIBE and more, see > https://stat.ethz.ch/mailman/listinfo/r-help > PLEASE do read the posting guide http://www.R-project.org/posting-guide.html > and provide commented, minimal, self-contained, reproducible code. >
Adams, Jean
2016-Dec-06 21:24 UTC
[R] R for skip to the next row if condition met and then another condition to check
This might help. # your example data trboot3 <- structure(c(0L, -1L, -1L, -1L, -1L, -1L, -1L, -1L, 0L, 0L, -1L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 1L, 1L, 0L, 0L, 0L, 0L, 1L, 1L, 1L, 0L, 0L, 0L, 0L, 0L, -1L, -1L, 0L, 1L, 0L, 0L, -1L, -1L, -1L, -1L, -1L, -1L, -1L, -1L, -1L, 0L, 0L, 0L, 0L, 0L, 0L, -1L, 0L, 0L, 0L), .Dim = c(20L, 3L), .Dimnames = list(NULL, c("V7", "V8", "V9"))) # function to identify first occurrence of successive values in a vector first <- function (x) { l <- length(x) y <- c(1, 1 - (x[-1] == x[-l])) y==1 } # start with a matrix of zeroes, the same size as the original trboot4 <- array(0, dim=dim(trboot3), dimnames=dimnames(trboot3)) # identify the first occurrence of successive values in each column indx <- apply(trboot3, 2, first) # replace these first occurrence cells with their original values trboot4[indx] <- trboot3[indx] trboot4 V7 V8 V9 [1,] 0 1 0 [2,] -1 0 -1 [3,] 0 0 0 [4,] 0 0 0 [5,] 0 0 0 [6,] 0 0 0 [7,] 0 0 0 [8,] 0 1 0 [9,] 0 0 0 [10,] 0 0 0 [11,] -1 0 0 [12,] 0 0 0 [13,] 0 0 0 [14,] 0 0 0 [15,] 0 0 0 [16,] 0 -1 0 [17,] 0 0 -1 [18,] 0 0 0 [19,] 0 1 0 [20,] 0 0 0 Jean On Sun, Dec 4, 2016 at 4:08 AM, Ashwini Patil <ash369ster at gmail.com> wrote:> I have a dataset with many rows and columns. Below is a sample: > > V7 V8 V90 1 0-1 1 -1-1 1 -1-1 0 -1-1 0 -1-1 0 > -1-1 0 -1-1 1 -10 1 -10 1 -1-1 0 00 0 00 0 00 > 0 00 0 00 -1 00 -1 -10 0 00 1 00 0 0 > > This data is saved in a matrix trboot3 What I want to do is create a loop > whereby two conditions are checked and data is altered. > > 1. If there is a zero, skip to the next row. > 2. If there is same number one below another in a row, keep the first > number and change the rest to zero. > > Here is my code for the above loop: > > trboot4<-trboot3 > valboot<-length(trboot3[,1])for (k in 1:length(trboot3[1,])){ > for (i in 2:valboot-1){ > if (trboot3[k,i]==0) {i<-i+1} > else{ > if(trboot3[k,i] == trboot3[k,i+1]){ > for (j in i+1:valboot){ if(trboot3[k,j] => trboot3[k,i]){trboot4[k,j]<-0}else{break} > if(j==valboot){break} > } > } > } > }} > > I want to save the new matrix in trboot4 > > basically the above sample should become: > > V7 V8 V90 1 0-1 0 -10 0 00 0 00 0 00 0 00 0 > 00 1 00 0 00 0 0-1 0 00 0 00 0 00 0 00 > 0 00 -1 00 0 -10 0 00 1 00 0 0 > > > Thank you! > > [[alternative HTML version deleted]] > > ______________________________________________ > R-help at r-project.org mailing list -- To UNSUBSCRIBE and more, see > https://stat.ethz.ch/mailman/listinfo/r-help > PLEASE do read the posting guide http://www.R-project.org/ > posting-guide.html > and provide commented, minimal, self-contained, reproducible code. > >[[alternative HTML version deleted]]