[R] Help understanding loop behaviour
Jim Lemon
drj|m|emon @end|ng |rom gm@||@com
Fri Apr 30 11:45:17 CEST 2021
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 using 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 using 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.
More information about the R-help
mailing list