Hallo, Sorry, my suggestion did not worked in your case correctly as split used natural factor ordering.
So using Jim's data, this results in desired output. #prepare factor in original ordering ff <- factor(xx[,1], levels=unique(xx[,1])) lll <- split(xx$COMPANY_NUMBER, ff) xx$I <- unlist(lapply(lll, function(x) c(rep(1, length(x)-1), max(length(x)))),use.names=FALSE) xx$J <- unlist(lapply(lll, function(x) 1:length(x)), use.names=FALSE) > xx COMPANY_NUMBER NUMBER_OF_YEARS I J 1 70837 3 1 1 2 70837 3 1 2 3 70837 3 3 3 4 1000403 4 1 1 5 1000403 4 1 2 6 1000403 4 1 3 7 1000403 4 4 4 8 10029943 3 1 1 9 10029943 3 1 2 10 10029943 3 3 3 11 10037980 4 1 1 12 10037980 4 1 2 13 10037980 4 1 3 14 10037980 4 4 4 15 10057418 3 1 1 16 10057418 3 1 2 17 10057418 3 3 3 18 1009550 4 1 1 19 1009550 4 1 2 20 1009550 4 1 3 21 1009550 4 4 4 Cheers. Petr > -----Original Message----- > From: R-help <r-help-boun...@r-project.org> On Behalf Of Jim Lemon > Sent: Friday, April 30, 2021 11:45 AM > To: e-mail ma015k3113 <ma015k3...@blueyonder.co.uk>; r-help mailing list > <r-help@r-project.org> > Subject: Re: [R] Help understanding loop behaviour > > Hi email, > If you want what you described, try this: > > xx<-read.table(text="COMPANY_NUMBER NUMBER_OF_YEARS > 0070837 3 > 0070837 3 > 0070837 3 > 1000403 4 > 1000403 4 > 1000403 4 > 1000403 4 > 10029943 3 > 10029943 3 > 10029943 3 > 10037980 4 > 10037980 4 > 10037980 4 > 10037980 4 > 10057418 3 > 10057418 3 > 10057418 3 > 1009550 4 > 1009550 4 > 1009550 4 > 1009550 4", > header=TRUE,stringsAsFactors=FALSE) > xx$I<-NA > xx$J<-NA > row_count<-1 > for(row in 1:nrow(xx)) { > if(row == nrow(xx) || > xx$COMPANY_NUMBER[row]==xx$COMPANY_NUMBER[row+1]) { > xx$I[row]<-1 > xx$J[row]<-row_count > row_count<-row_count+1 > } else { > xx$I[row]<-xx$J[row]<-xx$NUMBER_OF_YEARS[row] > row_count<-1 > } > } > xx > > Like Petr, I am assuming that you want company 10057418 treated the same > as the others. If not, let us know why. I am also adssuming that the first three > rows should _not_ have a "#" at the beginning, which means that they will be > discarded. > > Jim > > On Fri, Apr 30, 2021 at 1:41 AM e-mail ma015k3113 via R-help <r-help@r- > project.org> wrote: > > > > I am trying to understand how loops in operate. I have a simple > > dataframe xx which is as follows > > > > COMPANY_NUMBER NUMBER_OF_YEARS > > > > #0070837 3 > > #0070837 3 > > #0070837 3 > > 1000403 4 > > 1000403 4 > > 1000403 4 > > 1000403 4 > > 10029943 3 > > 10029943 3 > > 10029943 3 > > 10037980 4 > > 10037980 4 > > 10037980 4 > > 10037980 4 > > 10057418 3 > > 10057418 3 > > > > 10057418 3 > > 1009550 4 > > 1009550 4 > > 1009550 4 > > 1009550 4 > > The code I have written is > > > > while (i <= nrow(xx1) ) > > > > { > > > > for (j in 1:xx1$NUMBER_OF_YEARS[i]) > > { > > xx1$I[i] <- i > > xx1$J[j] <- j > > xx1$NUMBER_OF_YEARS_j[j] <- xx1$NUMBER_OF_YEARS[j] } i=i + > > (xx1$NUMBER_OF_YEARS[i] ) } After running the code I want my > dataframe > > to look like > > > > |COMPANY_NUMBER |NUMBER_OF_YEARS| | I| |J| > > > > |#0070837 |3| |1| |1| > > |#0070837 |3| |1| |2| > > |#0070837 |3| |3| |3| > > |1000403 |4| |1| |1| > > |1000403 |4| |1| |2| > > |1000403 |4| |1| |3| > > |1000403 |4| |4| |4| > > |10029943 |3| |1| |1| > > |10029943 |3| |1| |2| > > |10029943 |3| |3| |3| > > |10037980 |4| |1| |1| > > |10037980 |4| |1| |2| > > |10037980 |4| |1| |3| > > |10037980 |4| |4| |4| > > |10057418 |3| |1| |1| > > |10057418 |3| |1| |1| > > |10057418 |3| |1| |1| > > |1009550 |4| |1| |1| > > |1009550 |4| |1| |2| > > |1009550 |4| |1| |3| > > |1009550 |4| |4| |4| > > > > > > I get the correct value of I but in the wrong row but the vaule of J > > is correct in the first iteration and then it goes to 1 > > > > Any help will be greatly appreciated > > [[alternative HTML version deleted]] > > > > ______________________________________________ > > R-help@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. > > ______________________________________________ > R-help@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.
______________________________________________ R-help@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.