eric
2014-Aug-28 22:05 UTC
[R-es] problema al copiar datos de tipo caracter de un archivo a otro
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. ------------ próxima parte ------------ A non-text attachment was scrubbed... Name: con03-1111.csv Type: text/csv Size: 3254 bytes Desc: no disponible URL: <https://stat.ethz.ch/pipermail/r-help-es/attachments/20140828/70ae5ef6/attachment.bin> ------------ próxima parte ------------ A non-text attachment was scrubbed... Name: dec11-0911.csv Type: text/csv Size: 627 bytes Desc: no disponible URL: <https://stat.ethz.ch/pipermail/r-help-es/attachments/20140828/70ae5ef6/attachment-0001.bin> ------------ próxima parte ------------ A non-text attachment was scrubbed... Name: dol11-0911.csv Type: text/csv Size: 186 bytes Desc: no disponible URL: <https://stat.ethz.ch/pipermail/r-help-es/attachments/20140828/70ae5ef6/attachment-0002.bin> ------------ próxima parte ------------ A non-text attachment was scrubbed... Name: lim11-0911.csv Type: text/csv Size: 1540 bytes Desc: no disponible URL: <https://stat.ethz.ch/pipermail/r-help-es/attachments/20140828/70ae5ef6/attachment-0003.bin> ------------ próxima parte ------------ A non-text attachment was scrubbed... Name: sta00-1111.csv Type: text/csv Size: 1342 bytes Desc: no disponible URL: <https://stat.ethz.ch/pipermail/r-help-es/attachments/20140828/70ae5ef6/attachment-0004.bin>
Carlos Ortega
2014-Aug-29 09:10 UTC
[R-es] problema al copiar datos de tipo caracter de un archivo a otro
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 are1 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]]
eric
2014-Aug-29 17:36 UTC
[R-es] problema al copiar datos de tipo caracter de un archivo a otro
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.