[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