[R-es] problema al copiar datos de tipo caracter de un archivo a otro

eric ericconchamunoz en gmail.com
Vie Ago 29 19:36:36 CEST 2014


Muchas gracias por tu tiempo y experiencia Carlos, hay algunas 
sentencias que no entiendo bien como funcionan, pero lo examinare con 
detencion y tratare de usarlo.

Abrazos, eric.




On Fri 29 Aug 2014 05:10:27 CLT, Carlos Ortega wrote:
> Hola,
>
> He preferido hacerlo de otra forma, que me parece más sencilla y
> directa...
>
> #-----------------------------------
> #Get filenames
> filenames <- list.files(path =".", pattern="*.csv")
>
> #For each file get filename and needed rows to process
> dat <- data.frame()
> for (i in 1:length(filenames)) {
>
>         tmp <- read.csv(filenames[i], header=FALSE, sep="\t")
>         rowsgod <- tmp[grep("16|18", tmp[,7]),]
>         namestmp <- rep(filenames[i], dim(rowsgod)[1])
>         dattmp <- cbind.data.frame(namestmp, rowsgod)
>         dat <- rbind.data.frame(dat,dattmp)
>
> }
> dat
>
> #Now build desired data.frame with dat, which has everything...
> datEnd <- data.frame(
>                        sol =  substr(dat[,1],1,3)
>                       ,col =  substr(dat[,1],4,4)
>                       ,dia =  substr(dat[,1],7,8)
>                       ,rep =  substr(dat[,1],5,5)
>                       ,nca =  dat$V7
>                       ,nin =  dat$V8
>                       ,iso =  dat$V9
>                       ,are =  dat$V5
>                     )
> datEnd
> #-----------------------------------
>
> Produce este resultado, que es el que buscas:
>
> > datEnd
>    sol col dia rep nca nin iso          are
> 1  con   0  11   3  16   0   s 0.6456086677
> 2  con   0  11   3  18   0   s 0.3053691917
> 3  dec   1  09   1  16   0   s 0.6639146750
> 4  dec   1  09   1  18   0   s 0.3091836961
> 5  dol   1  09   1  16   0   s 0.6156171347
> 6  dol   1  09   1  18   0   s 0.3843828653
> 7  lim   1  09   1  16   0   s 0.5564731168
> 8  lim   1  09   1  16   1   t 0.0106572067
> 9  lim   1  09   1  16   1   c 0.0037889998
> 10 lim   1  09   1  18   0   s 0.1257471243
> 11 lim   1  09   1  18   1   t 0.0186650959
> 12 lim   1  09   1  18   1   c 0.0864878415
> 13 sta   0  11   0  16   0   s 0.4551157046
> 14 sta   0  11   0  16   1   t 0.0628554177
> 15 sta   0  11   0  16   1   c 0.0338715807
> 16 sta   0  11   0  18   0   s 0.0996836339
> 17 sta   0  11   0  18   1   t 0.0001684001
> 18 sta   0  11   0  18   1   t 0.1565995720
> 19 sta   0  11   0  18   1   c 0.1900169214
> 20 sta   0  11   0  18   3   s 0.0003392487
>
> Saludos,
> Carlos Ortega
> www.qualityexcellence.es <http://www.qualityexcellence.es>
>
>
>
> El 29 de agosto de 2014, 0:05, eric <ericconchamunoz en gmail.com
> <mailto:ericconchamunoz en gmail.com>> escribió:
>
>     Estimada comunidad, tengo un problema que no puedo resolver. Tengo
>     muchos archivos (los llamaremos "TMP") con los que debo construir un
>     archivo resumen que llamare "DAT".
>
>     A partir de los nombres de los archivos TMP construyo las primeras 4
>     columnas de DAT, luego, con datos del interior del archivo TMP
>     construyo
>     las columnas 5 a 9 de DAT.
>
>     El problema insoluble que tengo es que la columna 7 de DAT, se
>     rellena a
>     partir de la columna 9 de TMP. Sin embargo, cuando miro el archivo
>     final
>     DAT, en la columna 7 me aparecen numeros como 1, 2 o 3, en lugar
>     de "c",
>     "t" o "s" que es lo que deberia aparecer.
>
>     Al principio crei que era un problema del tipo de dato, asi es que
>     inclui en el codigo la funcion as.character() para las columnas 1
>     y 7 de
>     DAT y la columna 9 de TMP que son del tipo character, pero todo
>     sigue igual.
>
>     Cuando miro los datos de TMP, por ejemplo, TMP[1,9], me aparece el
>     dato
>     correcto como "c" por ejemplo, pero cuando miro el resultado en
>     DAT, por
>     ejemplo, DAT[1,7] me aparece un numero.
>
>     No puedo encontrar el error y me tiene bastante cansado, asi es que
>     cualquier ayuda es bienvenida.
>
>     Adjunto algiunos archivos TMP para que prueben el codigo que pego
>     mas abajo.
>
>     Espero haberme explicado adecuadamente.
>
>     Muchas gracias,
>
>     Eric.
>
>
>
>
>       # construir un archivo con los datos de los fames clasificados para
>       filenames <- list.files(path =
>     "/home/neo/Documents/Dropbox2/Tesis/4tesis/2.objesp/experimento/expnov/4fames/")
>         # construir el matchingFile
>         dat <- data.frame("sol",0,0,0,0,0,"a",0)
>         dat[,1] <- as.character(dat[,1])
>         dat[,7] <- as.character(dat[,7])
>         colnames(dat) <-
>     c("sol","con","dia","rep","nca","nin","iso","are")
>       i <- 1
>       k <- 1
>       for (i in 1:length(filenames))
>       {
>           # leer los datos desde cada archivo
>           tmp <- read.csv(filenames[i], header=FALSE, sep="\t")
>           # sacar los datos y meterlos a un nvo archivo temporal
>             # datos de identificacion
>               dat[k,1] <- substr(filenames[i],1,3)
>               dat[k,2] <- substr(filenames[i],4,4)
>               dat[k,3] <- substr(filenames[i],7,8)
>               dat[k,4] <- substr(filenames[i],5,5)
>           # para comenzar a leer los datos desde el C16:0
>           j <- 1
>           while (tmp[j,3] != max(tmp[,3]))  { j <- j + 1 }
>
>           # para tomar los datos del archivo
>           for (j in j:nrow(tmp))
>               {
>                 if (tmp[j,7] %in% c(16,18))
>                 {
>                 # NCarb
>                 dat[k,5] <- tmp[j,7]
>                 # Nins
>                 dat[k,6] <- tmp[j,8]
>                 # isom
>                 tmp[j,9] <- as.character(tmp[j,9])
>                 dat[k,7] <- tmp[j,9]
>                 #area
>                 dat[k,8] <- tmp[j,5]
>
>                 k <- k + 1
>                 }
>               j <- j + 1
>               }
>           i <-  i + 1
>       }
>
>       #
>       write.table(dat,
>     "/home/neo/Documents/Dropbox2/Tesis/4tesis/2.objesp/experimento/expnov/dat.csv",
>     sep="\t", row.names = FALSE)
>
>       # rellenar los espacios vacios de la identificacion
>       dat <-
>     read.csv("/home/neo/Documents/Dropbox2/Tesis/4tesis/2.objesp/experimento/expnov/dat.csv",
>     header=TRUE, sep="\t")
>       dat[,1] <- as.character(dat[,1])
>       n <- 2
>       for (n in 2:nrow(dat))
>       {7
>         if (is.na <http://is.na>(dat[n,1]) == "TRUE")
>           {
>             dat[n,1] <- dat[n-1,1]
>             dat[n,2] <- dat[n-1,2]
>             dat[n,3] <- dat[n-1,3]
>             dat[n,4] <- dat[n-1,4]
>           }
>           n <- n + 1
>       }
>       dat
>
>
>
>
>
>
>
>
>
>
>     --
>     Forest Engineer
>     Master in Environmental and Natural Resource Economics
>     Ph.D. student in Sciences of Natural Resources at La Frontera
>     University
>     Member in AguaDeTemu2030, citizen movement for Temuco with green city
>     standards for living
>
>     Nota: Las tildes se han omitido para asegurar compatibilidad con
>     algunos
>     lectores de correo.
>
>     _______________________________________________
>     R-help-es mailing list
>     R-help-es en r-project.org <mailto:R-help-es en r-project.org>
>     https://stat.ethz.ch/mailman/listinfo/r-help-es
>
>
>
>
> --
> Saludos,
> Carlos Ortega
> www.qualityexcellence.es <http://www.qualityexcellence.es>

--
Forest Engineer
Master in Environmental and Natural Resource Economics
Ph.D. student in Sciences of Natural Resources at La Frontera University
Member in AguaDeTemu2030, citizen movement for Temuco with green city 
standards for living

Nota: Las tildes se han omitido para asegurar compatibilidad con 
algunos lectores de correo.



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