Hola,

Realmente el problema no es por el "if()", el origen del problema está en
la forma en la que defines el data.frame.
En la forma en la que lo has definido, la columna data$X1 realmente se ha
convertido en un factor:

> data$X1
[1] 1  2  3  12 13
Levels: 1 12 13 2 3


Si el data.frame lo creas de esta otra forma, más sencilla y compacta
desaparece el problema y el bucle funciona sin problemas.

> *#data<-(c(a ,b))*
> *#dim(data)<-c(5,2)*
> *data<-data.frame(X1=a, X2=b)*
> nrow(data)
[1] 5
>
> data$X3<-c("a","b","c","d","e")
>
> data$X1
[1]  1  2  3 12 13
>
> for (i in 1:nrow(data)){
+   if (data$X1[i] >5) {data$X3[i]<-"F"}
+   }
>
> data
  X1 X2 X3
1  1  a  a
2  2  b  b
3  3  c  c
4 12  d  *F*
5 13  e  *F*
>

Saludos,
Carlos Ortega
www.qualityexcellence.es


El 3 de junio de 2012 13:13, Otto F. Wagner <ofwagner@gmail.com> escribió:

> *
> *
> *
> *
> Hola, tengo una duda. Estoy intentando reproducir algo que hago a diario en
> SAS en el trabajo.
>
> Data tabla2;
> set tabla1;
> if var1>5 then var2="+5";
> else var2="-5";
> run;
>
> Estoy intentando hacer este ejemplo con R porque me gustaría replicar todo
> lo que sé de SAS en R.
>
> Sé que el IF de R no es vectorial pero por lo que he visto en internet se
> puede arreglar con un bucle. La función IFELSE me gusta menos porque creo
> que para anidar 3 o más if es poco esquemática. Otra alternativa sería usar
> sqldf pero como os decía en internet he visto el tema de mezclar bucles con
> IF.
>
> Os pongo lo que he hecho y el error porque no encuentro el fallo.
>
> a<-c(1,2,3,12,13)
> b<-c("a","b","c","d","e")
>
>
> Mi script:
>
> data<-(c(a ,b))
> dim(data)<-c(5,2)
> data<-data.frame(data)
> nrow(data)
>
>
>
>
> data$X3<-c("a","b","c","d","e") ## no sé si es necesario crear antes la
> columna pero por si las flies la creo
>
> for (i in 1:nrow(data)){if (data$X1[i]>5) {data$X3[i]<-"F"}}
>
>
> La consola de R:
> > for (i in 1:nrow(data)){if (data$X1[i]>5) {data$X3[i]<-"F"}}
> Error en if (data$X1[i] > 5) { :
>  valor ausente donde TRUE/FALSE es necesario
> Además: Mensajes de aviso perdidos
> In Ops.factor(data$X1[i], 5) : > not meaningful for factors
>
> Muchas gracias y saludos
>
> Otto F.
>
>        [[alternative HTML version deleted]]
>
>
> _______________________________________________
> R-help-es mailing list
> R-help-es@r-project.org
> https://stat.ethz.ch/mailman/listinfo/r-help-es
>
>


-- 
Saludos,
Carlos Ortega
www.qualityexcellence.es

	[[alternative HTML version deleted]]

