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

Carlos Ortega cof en qualityexcellence.es
Vie Ago 29 11:10:27 CEST 2014


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



El 29 de agosto de 2014, 0:05, eric <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(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
> https://stat.ethz.ch/mailman/listinfo/r-help-es
>
>


-- 
Saludos,
Carlos Ortega
www.qualityexcellence.es

	[[alternative HTML version deleted]]



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