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 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]]
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.
Maybe Matching Threads
- RV: zyka RD
- graficar superficie de respuesta con los valores de las variables originales ...
- Problema con los paneles de un grafico
- como pasar de data.frame -> cast -> data.frame
- Como se hace el operador "o" (OR) para seleccionar dos o mas niveles de un vector ?