[R-es] trabajar con todos los elementos de la fila de un data.table

Olivier Nuñez onunez en unex.es
Mie Ene 28 17:41:31 CET 2015


Cocinando de manera más o menos elegante, se obtiene algo más eficiente: 



> require(data.table) 
> n=10000 
> DT=data.table(ID=1:(4*n),ERR1=rep(c(1,1,NA,NA),n),ERR2=rep(c(NA,2,2,NA),n),ERR3=rep(c(3,3,3,NA),n)) 
> system.time(DT[,lista:=paste(na.omit(c(ERR1,ERR2,ERR3)),collapse="|"),by=ID]) 
user system elapsed 
0.71 0.00 0.72 
> 
> 
> DT2=data.table(ERR1=rep(c(1,1,NA,NA),n),ERR2=rep(c(NA,2,2,NA),n),ERR3=rep(c(3,3,3,NA),n)) 
> system.time( 
+ DT2[,lista:=gsub("\\|$","",gsub("NA|","",paste0(paste(ERR1,ERR2,ERR3,sep="|"),"|"),fixed=TRUE))] 
+ ) 
user system elapsed 
0.11 0.00 0.11 





----- Mensaje original -----

De: "Patricio Fuenmayor Viteri" <patricio.fuenmayor en outlook.com> 
Para: "Olivier Nuñez" <onunez en unex.es> 
Enviados: Miércoles, 28 de Enero 2015 16:15:32 
Asunto: RE: [R-es] trabajar con todos los elementos de la fila de un data.table 

Gracias ....!!! 
Exactamente lo que quería... 
estaba cerca ... !!! 

Ahora me pregunto... hay una forma mas eficiente de hacer esto ??? mi duda surge ya que mi proceso de validación tarda 3 veces menos que este "etiquetamiento" de los errores ... y pensaría que debería ser al contrario porque solo estoy juntando valores y poniéndoles una condición 

una vez mas gracias ... !!! 



> Date: Wed, 28 Jan 2015 10:00:59 +0100 
> From: onunez en unex.es 
> To: patricio.fuenmayor en outlook.com 
> CC: r-help-es en r-project.org 
> Subject: Re: [R-es] trabajar con todos los elementos de la fila de un data.table 
> 
> Utiliza "collapse" en vez de "sep" dentro de la función paste(). 
> Un ejemplo: 
> 
> > DT=data.table(ID=1:4,ERR1=c(1,1,NA,NA),ERR2=c(NA,2,2,NA),ERR3=c(3,3,3,NA)) 
> > DT 
> ID ERR1 ERR2 ERR3 
> 1: 1 1 NA 3 
> 2: 2 1 2 3 
> 3: 3 NA 2 3 
> 4: 4 NA NA NA 
> > DT[,lista:=paste(na.omit(c(ERR1,ERR2,ERR3)),collapse="|"),by=ID] 
> > DT 
> ID ERR1 ERR2 ERR3 lista 
> 1: 1 1 NA 3 1|3 
> 2: 2 1 2 3 1|2|3 
> 3: 3 NA 2 3 2|3 
> 4: 4 NA NA NA 
> > 
> 
> 
> ----- Mensaje original ----- 
> De: "Patricio Fuenmayor Viteri" <patricio.fuenmayor en outlook.com> 
> Para: "r-help-es" <r-help-es en r-project.org> 
> Enviados: Martes, 27 de Enero 2015 17:05:23 
> Asunto: [R-es] trabajar con todos los elementos de la fila de un data.table 
> 
> Hola a todos...Auxilio, estoy varado en esto y creo que mi terquedad no me deja avanzar ... terquedad ya que estoy usando la estructura data.table y no logro obtener el resultado. Tengo una DT contiene un DATO y los resultados de la aplicaci�n de una validaci�n (ERR01, ERR2, ERR3) y la concatenaci�n de estos errores en una sola columna. Si tiene error, graba el n�mero del error, si no lo tiene, graba NA. Utilizando la funci�n paste directamente en el DT se ontiene la variable LISTA: 
> DATO ERR1 ERR2 ERR3 LISTAAAA 1 2 3 1|2|3BBB NA 2 3 NA|2|3CCC NA NA 3 NA|NA|3DDD NA NA NA NA|NA|NA 
> Pero lo que se requiere es que el NA no se muestre, es decir lista deber�a tener elementos como: 1|2|3, 2|3, 3, y vac�o, si las 3 validaciones arrojaron NA.uso lo siguiente: 
> DT[,lista:=paste(err1,err1,err3,sep="|")] 
> pero para quitar los NA, debo usar funciones como na.omit, y no logro crear la estructura para usarlo... que debe ser un na,omit(c(err1,err2,err3)) y sobre esto el paste.Supongo que tengo un l�o en uso de las estructuras ... Si no lo logro, toca trabajar con data.frames y dejar a aun lado mi terquedad...!!! 
> Gracias por cualquier ayuda y/o sugerencia. 
> 
> 
> 
> [[alternative HTML version deleted]] 
> 
> 
> _______________________________________________ 
> R-help-es mailing list 
> R-help-es en r-project.org 
> https://stat.ethz.ch/mailman/listinfo/r-help-es 


	[[alternative HTML version deleted]]



Más información sobre la lista de distribución R-help-es