[R] Compressing code help in a loop

Wush Wu wush978 at gmail.com
Mon Nov 10 14:29:56 CET 2014


Dear Francesca,

Is this what you want?

```r
index <- c(406, 107, 207, 307, 407, 108, 208, 308, 408, 109, 209, 309, 409,
110, 210, 310, 410, 111, 211)
p_m <- match( p_int$p_made, index)
dim(p_m) <- c(dim(p_int)[1],1)
```

Best,
Wush
PhD Student Graduate Institute of Electrical Engineering, National Taiwan
University



2014-11-10 20:14 GMT+08:00 Francesca <francesca.pancotto at gmail.com>:

> Dear Contributors
>
> I have a problem with a loop.
>
> I needed to create a variable that takes values 1,2.. to 19 corresponding
> to the value of a variable in a data.frame whose name is p_int$p_made and
>
> which takes values from 406  to 211.
>
> The problem is that this values come ordered in the wrong way when I try to
> compress the loop as the system reads
>
>
> 107,111,207,211,311,406,407,408,409,410,411,
>
>
> while they correspond to quarters-years so they should be ordered as
>
>
> 406-107-207-307-407…
>
> the only solution I found was really silly. It is the following.
>
>
>
>
> p_m<-matrix(0,dim(p_int)[1],1)
>
> for (i in 1:length(p_int$p_made)){
>
>   if (p_int$p_made[i]==406) p_m[i]<-1 else
>
>     if (p_int$p_made[i]==107) p_m[i]<-2 else
>
>       if (p_int$p_made[i]==207) p_m[i]<-3 else
>
>         if (p_int$p_made[i]==307) p_m[i]<-4 else
>
>           if (p_int$p_made[i]==407) p_m[i]<-5 else
>
>             if (p_int$p_made[i]==108) p_m[i]<-6 else
>
>               if (p_int$p_made[i]==208) p_m[i]<-7 else
>
>                 if (p_int$p_made[i]==308) p_m[i]<-8 else
>
>                   if (p_int$p_made[i]==408) p_m[i]<-9 else
>
>                     if (p_int$p_made[i]==109) p_m[i]<-10 else
>
>                       if (p_int$p_made[i]==209) p_m[i]<-11 else
>
>                         if (p_int$p_made[i]==309) p_m[i]<-12 else
>
>                           if (p_int$p_made[i]==409) p_m[i]<-13 else
>
>                             if (p_int$p_made[i]==110) p_m[i]<-14 else
>
>                               if (p_int$p_made[i]==210) p_m[i]<-15 else
>
>                                 if (p_int$p_made[i]==310) p_m[i]<-16 else
>
>                                   if (p_int$p_made[i]==410) p_m[i]<-17 else
>
>                                     if (p_int$p_made[i]==111) p_m[i]<-18
> else
>
>                                       if (p_int$p_made[i]==211) p_m[i]<-19
>
> }
>
> Can anyone help to find something more efficient?
>
>
> Thanks in advance.
>
>
> Francesca
>
> --
>
> Francesca
>
> ----------------------------------
> Francesca Pancotto
> Associate Professor
> University of Modena and Reggio Emilia
> Viale A. Allegri, 9
> 40121 Reggio Emilia
> Office: +39 0522 523264
> Web: https://sites.google.com/site/francescapancotto/
> ----------------------------------
>
>         [[alternative HTML version deleted]]
>
> ______________________________________________
> R-help at r-project.org mailing list
> 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]]



More information about the R-help mailing list