Hola: ¿Cómo puedo conseguir una línea horizontal separadora entre la fila correspondiente a los nombres de las columnas y la primera fila de datos?. ¿Hay algo similar a write.table que lo haga, o hay que hacerlo manualmente escribiendo un paste de "_" con la longitud deseada?. El problema es que el dataframe que vuelco, al hacerle un paste con separador "\t", para saber la longitud que debe tener la línea a dibujar, me convierte (como resultado del paste) a valor "1" cada valor de la fila del dataframe. A ver si me pudierais echar un cable. Gracias Eva Prieto Castro [[alternative HTML version deleted]]
Hola, Lo que había entendido es que necesitabas calcular la longitud de toda la fila para poder poner una linea separadora. Pero una vez calculada la longitud, defines la longitud de la línea y le pasas el control al write.table para que escriba el data.frame en el fichero. En esa función "contadora" de caracteres, ha de convertir toda la fila a formato "as.character()" de ahí puede venir el error de los "1" que comentas. Por eso no puedes dejar la fila del data.frame convertida as.character antes de escribir en el fichero. De todas formas, si puedes adjuntar varias líneas del data.frame que estás intentando grabar y el código que utilizas, quizás podamos detectar donde está la anomalía. Saludos, Carlos Ortega www.qualityexcellence.es El 25 de abril de 2012 18:31, Eva Prieto Castro <evapcastro@yahoo.es>escribió:> > > > > > > Hola: > > ¿Cómo puedo conseguir una línea horizontal separadora entre la fila > correspondiente a los nombres de las columnas y la primera fila de datos?. > ¿Hay algo similar a write.table que lo haga, o hay que hacerlo manualmente > escribiendo un paste de "_" con la longitud deseada?. El problema es que el > dataframe que vuelco, al hacerle un paste con separador "\t", para saber la > longitud que debe tener la línea a dibujar, me convierte (como resultado > del paste) a valor "1" cada valor de la fila del dataframe. > > A ver si me pudierais echar un cable. > > Gracias > > Eva Prieto Castro > [[alternative HTML version deleted]] > > > _______________________________________________ > R-help-es mailing list > R-help-es@r-project.org > https://stat.ethz.ch/mailman/listinfo/r-help-es > >-- Saludos, Carlos Ortega www.qualityexcellence.es [[alternative HTML version deleted]]
Hola, Carlos: Lo que necesito es precisamente lo que describes en el primer párrafo. Los datos del data.frame los muestra bien, el problema está en el contaje previo de los caracteres, por causa de ese as.character. Un saludo. Eva Prieto Castro --- El mié, 25/4/12, Carlos Ortega <cof@qualityexcellence.es> escribió: De: Carlos Ortega <cof@qualityexcellence.es> Asunto: Re: [R-es] Líneas al hacer write.table Para: "Eva Prieto Castro" <evapcastro@yahoo.es> CC: R-help-es@r-project.org Fecha: miércoles, 25 de abril, 2012 23:03 Hola, Lo que había entendido es que necesitabas calcular la longitud de toda la fila para poder poner una linea separadora. Pero una vez calculada la longitud, defines la longitud de la línea y le pasas el control al write.table para que escriba el data.frame en el fichero. En esa función "contadora" de caracteres, ha de convertir toda la fila a formato "as.character()" de ahí puede venir el error de los "1" que comentas. Por eso no puedes dejar la fila del data.frame convertida as.character antes de escribir en el fichero. De todas formas, si puedes adjuntar varias líneas del data.frame que estás intentando grabar y el código que utilizas, quizás podamos detectar donde está la anomalía. Saludos, Carlos Ortega www.qualityexcellence.es El 25 de abril de 2012 18:31, Eva Prieto Castro <evapcastro@yahoo.es> escribió: Hola: ¿Cómo puedo conseguir una línea horizontal separadora entre la fila correspondiente a los nombres de las columnas y la primera fila de datos?. ¿Hay algo similar a write.table que lo haga, o hay que hacerlo manualmente escribiendo un paste de "_" con la longitud deseada?. El problema es que el dataframe que vuelco, al hacerle un paste con separador "\t", para saber la longitud que debe tener la línea a dibujar, me convierte (como resultado del paste) a valor "1" cada valor de la fila del dataframe. A ver si me pudierais echar un cable. Gracias Eva Prieto Castro [[alternative HTML version deleted]] _______________________________________________ R-help-es mailing list R-help-es@r-project.org https://stat.ethz.ch/mailman/listinfo/r-help-es -- Saludos, Carlos Ortega www.qualityexcellence.es [[alternative HTML version deleted]]
Hola Eva, Gracias. ¿Puedes pasarnos un par de líneas de ese data.frame para ver qué es lo que produce que cuando utilizas as.character() se conviertan en "1"? Seguramente encontremos otra forma de contar el número de caracteres evitando ese error. Gracias, Carlos Ortega www.qualityexcellence.es El 27 de abril de 2012 07:02, Eva Prieto Castro <evapcastro@yahoo.es>escribió:> Hola, Carlos: > > Lo que necesito es precisamente lo que describes en el primer párrafo. Los > datos del data.frame los muestra bien, el problema está en el contaje > previo de los caracteres, por causa de ese as.character. > > Un saludo. > > Eva Prieto Castro > > --- El *mié, 25/4/12, Carlos Ortega <cof@qualityexcellence.es>* escribió: > > > De: Carlos Ortega <cof@qualityexcellence.es> > Asunto: Re: [R-es] Líneas al hacer write.table > Para: "Eva Prieto Castro" <evapcastro@yahoo.es> > CC: R-help-es@r-project.org > Fecha: miércoles, 25 de abril, 2012 23:03 > > > Hola, > > Lo que había entendido es que necesitabas calcular la longitud de toda la > fila para poder poner una linea separadora. > Pero una vez calculada la longitud, defines la longitud de la línea y le > pasas el control al write.table para que escriba el data.frame en el > fichero. > > En esa función "contadora" de caracteres, ha de convertir toda la fila a > formato "as.character()" de ahí puede venir el error de los "1" que > comentas. Por eso no puedes dejar la fila del data.frame convertida > as.character antes de escribir en el fichero. > > De todas formas, si puedes adjuntar varias líneas del data.frame que estás > intentando grabar y el código que utilizas, quizás podamos detectar donde > está la anomalía. > > Saludos, > Carlos Ortega > www.qualityexcellence.es > > El 25 de abril de 2012 18:31, Eva Prieto Castro <evapcastro@yahoo.es<http://es.mc296.mail.yahoo.com/mc/compose?to=evapcastro@yahoo.es> > > escribió: > > > > > > > > Hola: > > ¿Cómo puedo conseguir una línea horizontal separadora entre la fila > correspondiente a los nombres de las columnas y la primera fila de datos?. > ¿Hay algo similar a write.table que lo haga, o hay que hacerlo manualmente > escribiendo un paste de "_" con la longitud deseada?. El problema es que el > dataframe que vuelco, al hacerle un paste con separador "\t", para saber la > longitud que debe tener la línea a dibujar, me convierte (como resultado > del paste) a valor "1" cada valor de la fila del dataframe. > > A ver si me pudierais echar un cable. > > Gracias > > Eva Prieto Castro > [[alternative HTML version deleted]] > > > _______________________________________________ > R-help-es mailing list > R-help-es@r-project.org<http://es.mc296.mail.yahoo.com/mc/compose?to=R-help-es@r-project.org> > https://stat.ethz.ch/mailman/listinfo/r-help-es > > > > > -- > Saludos, > Carlos Ortega > www.qualityexcellence.es > >-- Saludos, Carlos Ortega www.qualityexcellence.es [[alternative HTML version deleted]]
Hola, Carlos: Os indico un ejemplo básico referido a mi problema:> miLista <- list("Sujeto1", "Parametro1", 24, 26.5) > miLista[[1]] [1] "Sujeto1" [[2]] [1] "Parametro1" [[3]] [1] 24 [[4]] [1] 26.5> d<-data.frame(miLista) > dX.Sujeto1. X.Parametro1. X24 X26.5 1 Sujeto1 Parametro1 24 26.5> paste(d)[1] "1" "1" "24" "26.5" Un saludo Eva --- El vie, 27/4/12, Carlos Ortega <cof@qualityexcellence.es> escribió: De: Carlos Ortega <cof@qualityexcellence.es> Asunto: Re: [R-es] Líneas al hacer write.table Para: "Eva Prieto Castro" <evapcastro@yahoo.es> CC: R-help-es@r-project.org Fecha: viernes, 27 de abril, 2012 09:28 Hola Eva, Gracias. ¿Puedes pasarnos un par de líneas de ese data.frame para ver qué es lo que produce que cuando utilizas as.character() se conviertan en "1"? Seguramente encontremos otra forma de contar el número de caracteres evitando ese error. Gracias, Carlos Ortega www.qualityexcellence.es El 27 de abril de 2012 07:02, Eva Prieto Castro <evapcastro@yahoo.es> escribió: Hola, Carlos: Lo que necesito es precisamente lo que describes en el primer párrafo. Los datos del data.frame los muestra bien, el problema está en el contaje previo de los caracteres, por causa de ese as.character. Un saludo. Eva Prieto Castro --- El mié, 25/4/12, Carlos Ortega <cof@qualityexcellence.es> escribió: De: Carlos Ortega <cof@qualityexcellence.es> Asunto: Re: [R-es] Líneas al hacer write.table Para: "Eva Prieto Castro" <evapcastro@yahoo.es> CC: R-help-es@r-project.org Fecha: miércoles, 25 de abril, 2012 23:03 Hola, Lo que había entendido es que necesitabas calcular la longitud de toda la fila para poder poner una linea separadora. Pero una vez calculada la longitud, defines la longitud de la línea y le pasas el control al write.table para que escriba el data.frame en el fichero. En esa función "contadora" de caracteres, ha de convertir toda la fila a formato "as.character()" de ahí puede venir el error de los "1" que comentas. Por eso no puedes dejar la fila del data.frame convertida as.character antes de escribir en el fichero. De todas formas, si puedes adjuntar varias líneas del data.frame que estás intentando grabar y el código que utilizas, quizás podamos detectar donde está la anomalía. Saludos, Carlos Ortega www.qualityexcellence.es El 25 de abril de 2012 18:31, Eva Prieto Castro <evapcastro@yahoo.es> escribió: Hola: ¿Cómo puedo conseguir una línea horizontal separadora entre la fila correspondiente a los nombres de las columnas y la primera fila de datos?. ¿Hay algo similar a write.table que lo haga, o hay que hacerlo manualmente escribiendo un paste de "_" con la longitud deseada?. El problema es que el dataframe que vuelco, al hacerle un paste con separador "\t", para saber la longitud que debe tener la línea a dibujar, me convierte (como resultado del paste) a valor "1" cada valor de la fila del dataframe. A ver si me pudierais echar un cable. Gracias Eva Prieto Castro [[alternative HTML version deleted]] _______________________________________________ R-help-es mailing list R-help-es@r-project.org https://stat.ethz.ch/mailman/listinfo/r-help-es -- Saludos, Carlos Ortega www.qualityexcellence.es -- Saludos, Carlos Ortega www.qualityexcellence.es [[alternative HTML version deleted]]
Hola, De esta forma sí que funciona:> options(stringsAsFactors = FALSE)> miLista <- list("Sujeto1", "Parametro1", 24, 26.5)> d<-as.data.frame(miLista);d; X.Sujeto1. X.Parametro1. X24 X26.51 Sujeto1 Parametro1 24 26.5> paste(d)[1] "Sujeto1" "Parametro1" "24" "26.5">Saludos, Carlos Ortega www.qualityexcellence.es El 30 de abril de 2012 06:54, Eva Prieto Castro <evapcastro@yahoo.es>escribió:> Hola, Carlos: > > Os indico un ejemplo básico referido a mi problema: > > > miLista <- list("Sujeto1", "Parametro1", 24, 26.5) > > miLista > [[1]] > [1] "Sujeto1" > [[2]] > [1] "Parametro1" > [[3]] > [1] 24 > [[4]] > [1] 26.5 > > d<-data.frame(miLista) > > d > X.Sujeto1. X.Parametro1. X24 X26.5 > 1 Sujeto1 Parametro1 24 26.5 > > paste(d) > [1] "1" "1" "24" "26.5" > Un saludo > > Eva > > --- El *vie, 27/4/12, Carlos Ortega <cof@qualityexcellence.es>* escribió: > > > De: Carlos Ortega <cof@qualityexcellence.es> > Asunto: Re: [R-es] Líneas al hacer write.table > Para: "Eva Prieto Castro" <evapcastro@yahoo.es> > CC: R-help-es@r-project.org > Fecha: viernes, 27 de abril, 2012 09:28 > > > Hola Eva, > > Gracias. > ¿Puedes pasarnos un par de líneas de ese data.frame para ver qué es lo que > produce que cuando utilizas as.character() se conviertan en "1"? > > Seguramente encontremos otra forma de contar el número de caracteres > evitando ese error. > > Gracias, > Carlos Ortega > www.qualityexcellence.es > > El 27 de abril de 2012 07:02, Eva Prieto Castro <evapcastro@yahoo.es<http://es.mc296.mail.yahoo.com/mc/compose?to=evapcastro@yahoo.es> > > escribió: > > Hola, Carlos: > > Lo que necesito es precisamente lo que describes en el primer párrafo. Los > datos del data.frame los muestra bien, el problema está en el contaje > previo de los caracteres, por causa de ese as.character. > > Un saludo. > > Eva Prieto Castro > > --- El *mié, 25/4/12, Carlos Ortega <cof@qualityexcellence.es<http://es.mc296.mail.yahoo.com/mc/compose?to=cof@qualityexcellence.es> > >* escribió: > > > De: Carlos Ortega <cof@qualityexcellence.es<http://es.mc296.mail.yahoo.com/mc/compose?to=cof@qualityexcellence.es> > > > Asunto: Re: [R-es] Líneas al hacer write.table > Para: "Eva Prieto Castro" <evapcastro@yahoo.es<http://es.mc296.mail.yahoo.com/mc/compose?to=evapcastro@yahoo.es> > > > CC: R-help-es@r-project.org<http://es.mc296.mail.yahoo.com/mc/compose?to=R-help-es@r-project.org> > Fecha: miércoles, 25 de abril, 2012 23:03 > > > Hola, > > Lo que había entendido es que necesitabas calcular la longitud de toda la > fila para poder poner una linea separadora. > Pero una vez calculada la longitud, defines la longitud de la línea y le > pasas el control al write.table para que escriba el data.frame en el > fichero. > > En esa función "contadora" de caracteres, ha de convertir toda la fila a > formato "as.character()" de ahí puede venir el error de los "1" que > comentas. Por eso no puedes dejar la fila del data.frame convertida > as.character antes de escribir en el fichero. > > De todas formas, si puedes adjuntar varias líneas del data.frame que estás > intentando grabar y el código que utilizas, quizás podamos detectar donde > está la anomalía. > > Saludos, > Carlos Ortega > www.qualityexcellence.es > > El 25 de abril de 2012 18:31, Eva Prieto Castro <evapcastro@yahoo.es<http://es.mc296.mail.yahoo.com/mc/compose?to=evapcastro@yahoo.es> > > escribió: > > > > > > > > Hola: > > ¿Cómo puedo conseguir una línea horizontal separadora entre la fila > correspondiente a los nombres de las columnas y la primera fila de datos?. > ¿Hay algo similar a write.table que lo haga, o hay que hacerlo manualmente > escribiendo un paste de "_" con la longitud deseada?. El problema es que el > dataframe que vuelco, al hacerle un paste con separador "\t", para saber la > longitud que debe tener la línea a dibujar, me convierte (como resultado > del paste) a valor "1" cada valor de la fila del dataframe. > > A ver si me pudierais echar un cable. > > Gracias > > Eva Prieto Castro > [[alternative HTML version deleted]] > > > _______________________________________________ > R-help-es mailing list > R-help-es@r-project.org<http://es.mc296.mail.yahoo.com/mc/compose?to=R-help-es@r-project.org> > https://stat.ethz.ch/mailman/listinfo/r-help-es > > > > > -- > Saludos, > Carlos Ortega > www.qualityexcellence.es > > > > > -- > Saludos, > Carlos Ortega > www.qualityexcellence.es > >-- Saludos, Carlos Ortega www.qualityexcellence.es [[alternative HTML version deleted]]
Gracias, Carlos! Dando un paso más, me interesaría que ese paste tuviera en cuenta las tabulaciones, para que la longitud de la línea sea fiable y al quedar dibujada alcance hasta el final de la fila mostrada. Para lograrlo, he intentado hacer paste(d, collapse="\t"), y también paste(d, sep="\t") pero no logro la longitud real que ocupa la fila al volcarla con: write.table(d,file="tabla2.txt", append=TRUE, quote=FALSE, sep="\t",row.names=FALSE, col.names=FALSE) ¿Se os ocurre alguna idea?. Mil gracias. Eva --- El lun, 30/4/12, Carlos Ortega <cof@qualityexcellence.es> escribió: De: Carlos Ortega <cof@qualityexcellence.es> Asunto: Re: [R-es] Líneas al hacer write.table Para: "Eva Prieto Castro" <evapcastro@yahoo.es> CC: R-help-es@r-project.org Fecha: lunes, 30 de abril, 2012 10:22 Hola, De esta forma sí que funciona:> options(stringsAsFactors = FALSE) > miLista <- list("Sujeto1", "Parametro1", 24, 26.5) > d<-as.data.frame(miLista);d;X.Sujeto1. X.Parametro1. X24 X26.5 1 Sujeto1 Parametro1 24 26.5> paste(d)[1] "Sujeto1" "Parametro1" "24" "26.5">Saludos, Carlos Ortega www.qualityexcellence.es El 30 de abril de 2012 06:54, Eva Prieto Castro <evapcastro@yahoo.es> escribió: Hola, Carlos: Os indico un ejemplo básico referido a mi problema:> miLista <- list("Sujeto1", "Parametro1", 24, 26.5) > miLista[[1]] [1] "Sujeto1" [[2]] [1] "Parametro1" [[3]] [1] 24 [[4]] [1] 26.5> d<-data.frame(miLista) > dX.Sujeto1. X.Parametro1. X24 X26.5 1 Sujeto1 Parametro1 24 26.5> paste(d)[1] "1" "1" "24" "26.5" Un saludo Eva --- El vie, 27/4/12, Carlos Ortega <cof@qualityexcellence.es> escribió: De: Carlos Ortega <cof@qualityexcellence.es> Asunto: Re: [R-es] Líneas al hacer write.table Para: "Eva Prieto Castro" <evapcastro@yahoo.es> CC: R-help-es@r-project.org Fecha: viernes, 27 de abril, 2012 09:28 Hola Eva, Gracias. ¿Puedes pasarnos un par de líneas de ese data.frame para ver qué es lo que produce que cuando utilizas as.character() se conviertan en "1"? Seguramente encontremos otra forma de contar el número de caracteres evitando ese error. Gracias, Carlos Ortega www.qualityexcellence.es El 27 de abril de 2012 07:02, Eva Prieto Castro <evapcastro@yahoo.es> escribió: Hola, Carlos: Lo que necesito es precisamente lo que describes en el primer párrafo. Los datos del data.frame los muestra bien, el problema está en el contaje previo de los caracteres, por causa de ese as.character. Un saludo. Eva Prieto Castro --- El mié, 25/4/12, Carlos Ortega <cof@qualityexcellence.es> escribió: De: Carlos Ortega <cof@qualityexcellence.es> Asunto: Re: [R-es] Líneas al hacer write.table Para: "Eva Prieto Castro" <evapcastro@yahoo.es> CC: R-help-es@r-project.org Fecha: miércoles, 25 de abril, 2012 23:03 Hola, Lo que había entendido es que necesitabas calcular la longitud de toda la fila para poder poner una linea separadora. Pero una vez calculada la longitud, defines la longitud de la línea y le pasas el control al write.table para que escriba el data.frame en el fichero. En esa función "contadora" de caracteres, ha de convertir toda la fila a formato "as.character()" de ahí puede venir el error de los "1" que comentas. Por eso no puedes dejar la fila del data.frame convertida as.character antes de escribir en el fichero. De todas formas, si puedes adjuntar varias líneas del data.frame que estás intentando grabar y el código que utilizas, quizás podamos detectar donde está la anomalía. Saludos, Carlos Ortega www.qualityexcellence.es El 25 de abril de 2012 18:31, Eva Prieto Castro <evapcastro@yahoo.es> escribió: Hola: ¿Cómo puedo conseguir una línea horizontal separadora entre la fila correspondiente a los nombres de las columnas y la primera fila de datos?. ¿Hay algo similar a write.table que lo haga, o hay que hacerlo manualmente escribiendo un paste de "_" con la longitud deseada?. El problema es que el dataframe que vuelco, al hacerle un paste con separador "\t", para saber la longitud que debe tener la línea a dibujar, me convierte (como resultado del paste) a valor "1" cada valor de la fila del dataframe. A ver si me pudierais echar un cable. Gracias Eva Prieto Castro [[alternative HTML version deleted]] _______________________________________________ R-help-es mailing list R-help-es@r-project.org https://stat.ethz.ch/mailman/listinfo/r-help-es -- Saludos, Carlos Ortega www.qualityexcellence.es -- Saludos, Carlos Ortega www.qualityexcellence.es -- Saludos, Carlos Ortega www.qualityexcellence.es [[alternative HTML version deleted]]
Hola, Con paste0() sí que se puede construir... Mira este código.> options(stringsAsFactors = FALSE)> miLista <- list("Sujeto1", "Parametro1", 24, 26.5)> d<-as.data.frame(miLista);d; X.Sujeto1. X.Parametro1. X24 X26.51 Sujeto1 Parametro1 24 26.5> lin.con<-paste0(d, sep="\t")> lin.sin<-paste0(d, sep="")> lin.con; lin.sin[1] "Sujeto1\t" "Parametro1\t" "24\t" [4] "26.5\t" [1] "Sujeto1" "Parametro1" "24" "26.5" > con.t<-nchar(lin.con)> sin.t<-nchar(lin.sin)> con.t; sin.t[1] 8 11 3 5 [1] 7 10 2 4> sum(con.t);sum(sin.t)[1] 27 [1] 23> > lin.con.good<-sum(con.t)-1> lin.con.good[1] 26>Con paste0() introduces un "\t" al final de cada elemento de cada columna. Por tanto al contar el total de caracteres "reales" de una línea habrá que descontar uno (el último tabulador) que se coloca al final del último elemento de la fila. La longitud "buena" de la línea es lin.con.good.... Saludos, Carlos Ortega www.qualityexcellence.es P.S: Una curiosidad, ¿eres Ana o eres Eva?... El 30 de abril de 2012 17:36, Eva Prieto Castro <evapcastro@yahoo.es>escribió:> Gracias, Carlos! > > Dando un paso más, me interesaría que ese paste tuviera en cuenta las > tabulaciones, para que la longitud de la línea sea fiable y al quedar > dibujada alcance hasta el final de la fila mostrada. > > Para lograrlo, he intentado hacer paste(d, collapse="\t"), y también > paste(d, sep="\t") pero no logro la longitud real que ocupa la fila al > volcarla con: > > write.table(d,file="tabla2.txt", append=TRUE, quote=FALSE, > sep="\t",row.names=FALSE, col.names=FALSE) > > ¿Se os ocurre alguna idea?. > > Mil gracias. > > Eva > --- El *lun, 30/4/12, Carlos Ortega <cof@qualityexcellence.es>* escribió: > > > De: Carlos Ortega <cof@qualityexcellence.es> > Asunto: Re: [R-es] Líneas al hacer write.table > Para: "Eva Prieto Castro" <evapcastro@yahoo.es> > CC: R-help-es@r-project.org > Fecha: lunes, 30 de abril, 2012 10:22 > > > Hola, > > De esta forma sí que funciona: > > > options(stringsAsFactors = FALSE)> miLista <- list("Sujeto1", "Parametro1", 24, 26.5)> d<-as.data.frame(miLista);d; X.Sujeto1. X.Parametro1. X24 X26.5 > 1 Sujeto1 Parametro1 24 26.5> paste(d)[1] "Sujeto1" "Parametro1" "24" "26.5" > > > > > Saludos, > Carlos Ortega > www.qualityexcellence.es > > El 30 de abril de 2012 06:54, Eva Prieto Castro <evapcastro@yahoo.es<http://es.mc296.mail.yahoo.com/mc/compose?to=evapcastro@yahoo.es> > > escribió: > > Hola, Carlos: > > Os indico un ejemplo básico referido a mi problema: > > > miLista <- list("Sujeto1", "Parametro1", 24, 26.5) > > miLista > [[1]] > [1] "Sujeto1" > [[2]] > [1] "Parametro1" > [[3]] > [1] 24 > [[4]] > [1] 26.5 > > d<-data.frame(miLista) > > d > X.Sujeto1. X.Parametro1. X24 X26.5 > 1 Sujeto1 Parametro1 24 26.5 > > paste(d) > [1] "1" "1" "24" "26.5" > Un saludo > > Eva > > --- El *vie, 27/4/12, Carlos Ortega <cof@qualityexcellence.es<http://es.mc296.mail.yahoo.com/mc/compose?to=cof@qualityexcellence.es> > >* escribió: > > > De: Carlos Ortega <cof@qualityexcellence.es<http://es.mc296.mail.yahoo.com/mc/compose?to=cof@qualityexcellence.es> > > > Asunto: Re: [R-es] Líneas al hacer write.table > Para: "Eva Prieto Castro" <evapcastro@yahoo.es<http://es.mc296.mail.yahoo.com/mc/compose?to=evapcastro@yahoo.es> > > > CC: R-help-es@r-project.org<http://es.mc296.mail.yahoo.com/mc/compose?to=R-help-es@r-project.org> > Fecha: viernes, 27 de abril, 2012 09:28 > > > Hola Eva, > > Gracias. > ¿Puedes pasarnos un par de líneas de ese data.frame para ver qué es lo que > produce que cuando utilizas as.character() se conviertan en "1"? > > Seguramente encontremos otra forma de contar el número de caracteres > evitando ese error. > > Gracias, > Carlos Ortega > www.qualityexcellence.es > > El 27 de abril de 2012 07:02, Eva Prieto Castro <evapcastro@yahoo.es<http://es.mc296.mail.yahoo.com/mc/compose?to=evapcastro@yahoo.es> > > escribió: > > Hola, Carlos: > > Lo que necesito es precisamente lo que describes en el primer párrafo. Los > datos del data.frame los muestra bien, el problema está en el contaje > previo de los caracteres, por causa de ese as.character. > > Un saludo. > > Eva Prieto Castro > > --- El *mié, 25/4/12, Carlos Ortega <cof@qualityexcellence.es<http://es.mc296.mail.yahoo.com/mc/compose?to=cof@qualityexcellence.es> > >* escribió: > > > De: Carlos Ortega <cof@qualityexcellence.es<http://es.mc296.mail.yahoo.com/mc/compose?to=cof@qualityexcellence.es> > > > Asunto: Re: [R-es] Líneas al hacer write.table > Para: "Eva Prieto Castro" <evapcastro@yahoo.es<http://es.mc296.mail.yahoo.com/mc/compose?to=evapcastro@yahoo.es> > > > CC: R-help-es@r-project.org<http://es.mc296.mail.yahoo.com/mc/compose?to=R-help-es@r-project.org> > Fecha: miércoles, 25 de abril, 2012 23:03 > > > Hola, > > Lo que había entendido es que necesitabas calcular la longitud de toda la > fila para poder poner una linea separadora. > Pero una vez calculada la longitud, defines la longitud de la línea y le > pasas el control al write.table para que escriba el data.frame en el > fichero. > > En esa función "contadora" de caracteres, ha de convertir toda la fila a > formato "as.character()" de ahí puede venir el error de los "1" que > comentas. Por eso no puedes dejar la fila del data.frame convertida > as.character antes de escribir en el fichero. > > De todas formas, si puedes adjuntar varias líneas del data.frame que estás > intentando grabar y el código que utilizas, quizás podamos detectar donde > está la anomalía. > > Saludos, > Carlos Ortega > www.qualityexcellence.es > > El 25 de abril de 2012 18:31, Eva Prieto Castro <evapcastro@yahoo.es<http://es.mc296.mail.yahoo.com/mc/compose?to=evapcastro@yahoo.es> > > escribió: > > > > > > > > Hola: > > ¿Cómo puedo conseguir una línea horizontal separadora entre la fila > correspondiente a los nombres de las columnas y la primera fila de datos?. > ¿Hay algo similar a write.table que lo haga, o hay que hacerlo manualmente > escribiendo un paste de "_" con la longitud deseada?. El problema es que el > dataframe que vuelco, al hacerle un paste con separador "\t", para saber la > longitud que debe tener la línea a dibujar, me convierte (como resultado > del paste) a valor "1" cada valor de la fila del dataframe. > > A ver si me pudierais echar un cable. > > Gracias > > Eva Prieto Castro > [[alternative HTML version deleted]] > > > _______________________________________________ > R-help-es mailing list > R-help-es@r-project.org<http://es.mc296.mail.yahoo.com/mc/compose?to=R-help-es@r-project.org> > https://stat.ethz.ch/mailman/listinfo/r-help-es > > > > > -- > Saludos, > Carlos Ortega > www.qualityexcellence.es > > > > > -- > Saludos, > Carlos Ortega > www.qualityexcellence.es > > > > > -- > Saludos, > Carlos Ortega > www.qualityexcellence.es > >-- Saludos, Carlos Ortega www.qualityexcellence.es [[alternative HTML version deleted]]
Gracias, Carlos. El problema es que según ese mecanismo la tabulación se contabiliza como 1 caracter, y cuando vuelco el data.frame en fichero con write.table, la longitud de la fila es superior a la que sale según ese cálculo. ¿Comprendes?. Es como si necesitase saber a priori (antes de hacer el write.table) lo que va a dar de sí el data.frame. Por más vueltas que le doy no se me ocurre cómo resolver. Eva --- El lun, 30/4/12, Carlos Ortega <cof@qualityexcellence.es> escribió: De: Carlos Ortega <cof@qualityexcellence.es> Asunto: Re: [R-es] Líneas al hacer write.table Para: "Eva Prieto Castro" <evapcastro@yahoo.es> CC: R-help-es@r-project.org Fecha: lunes, 30 de abril, 2012 18:03 Hola, Con paste0() sí que se puede construir... Mira este código.> options(stringsAsFactors = FALSE) > miLista <- list("Sujeto1", "Parametro1", 24, 26.5) > d<-as.data.frame(miLista);d;X.Sujeto1. X.Parametro1. X24 X26.5 1 Sujeto1 Parametro1 24 26.5> lin.con<-paste0(d, sep="\t") > lin.sin<-paste0(d, sep="") > lin.con; lin.sin[1] "Sujeto1\t" "Parametro1\t" "24\t" [4] "26.5\t" [1] "Sujeto1" "Parametro1" "24" "26.5"> con.t<-nchar(lin.con) > sin.t<-nchar(lin.sin) > con.t; sin.t[1] 8 11 3 5 [1] 7 10 2 4> sum(con.t);sum(sin.t)[1] 27 [1] 23> > lin.con.good<-sum(con.t)-1 > lin.con.good[1] 26>Con paste0() introduces un "\t" al final de cada elemento de cada columna. Por tanto al contar el total de caracteres "reales" de una línea habrá que descontar uno (el último tabulador) que se coloca al final del último elemento de la fila. La longitud "buena" de la línea es lin.con.good.... Saludos, Carlos Ortega www.qualityexcellence.es P.S: Una curiosidad, ¿eres Ana o eres Eva?... El 30 de abril de 2012 17:36, Eva Prieto Castro <evapcastro@yahoo.es> escribió: Gracias, Carlos! Dando un paso más, me interesaría que ese paste tuviera en cuenta las tabulaciones, para que la longitud de la línea sea fiable y al quedar dibujada alcance hasta el final de la fila mostrada. Para lograrlo, he intentado hacer paste(d, collapse="\t"), y también paste(d, sep="\t") pero no logro la longitud real que ocupa la fila al volcarla con: write.table(d,file="tabla2.txt", append=TRUE, quote=FALSE, sep="\t",row.names=FALSE, col.names=FALSE) ¿Se os ocurre alguna idea?. Mil gracias. Eva --- El lun, 30/4/12, Carlos Ortega <cof@qualityexcellence.es> escribió: De: Carlos Ortega <cof@qualityexcellence.es> Asunto: Re: [R-es] Líneas al hacer write.table Para: "Eva Prieto Castro" <evapcastro@yahoo.es> CC: R-help-es@r-project.org Fecha: lunes, 30 de abril, 2012 10:22 Hola, De esta forma sí que funciona:> options(stringsAsFactors = FALSE) > miLista <- list("Sujeto1", "Parametro1", 24, 26.5) > d<-as.data.frame(miLista);d;X.Sujeto1. X.Parametro1. X24 X26.5 1 Sujeto1 Parametro1 24 26.5> paste(d)[1] "Sujeto1" "Parametro1" "24" "26.5">Saludos, Carlos Ortega www.qualityexcellence.es El 30 de abril de 2012 06:54, Eva Prieto Castro <evapcastro@yahoo.es> escribió: Hola, Carlos: Os indico un ejemplo básico referido a mi problema:> miLista <- list("Sujeto1", "Parametro1", 24, 26.5) > miLista[[1]] [1] "Sujeto1" [[2]] [1] "Parametro1" [[3]] [1] 24 [[4]] [1] 26.5> d<-data.frame(miLista) > dX.Sujeto1. X.Parametro1. X24 X26.5 1 Sujeto1 Parametro1 24 26.5> paste(d)[1] "1" "1" "24" "26.5" Un saludo Eva --- El vie, 27/4/12, Carlos Ortega <cof@qualityexcellence.es> escribió: De: Carlos Ortega <cof@qualityexcellence.es> Asunto: Re: [R-es] Líneas al hacer write.table Para: "Eva Prieto Castro" <evapcastro@yahoo.es> CC: R-help-es@r-project.org Fecha: viernes, 27 de abril, 2012 09:28 Hola Eva, Gracias. ¿Puedes pasarnos un par de líneas de ese data.frame para ver qué es lo que produce que cuando utilizas as.character() se conviertan en "1"? Seguramente encontremos otra forma de contar el número de caracteres evitando ese error. Gracias, Carlos Ortega www.qualityexcellence.es El 27 de abril de 2012 07:02, Eva Prieto Castro <evapcastro@yahoo.es> escribió: Hola, Carlos: Lo que necesito es precisamente lo que describes en el primer párrafo. Los datos del data.frame los muestra bien, el problema está en el contaje previo de los caracteres, por causa de ese as.character. Un saludo. Eva Prieto Castro --- El mié, 25/4/12, Carlos Ortega <cof@qualityexcellence.es> escribió: De: Carlos Ortega <cof@qualityexcellence.es> Asunto: Re: [R-es] Líneas al hacer write.table Para: "Eva Prieto Castro" <evapcastro@yahoo.es> CC: R-help-es@r-project.org Fecha: miércoles, 25 de abril, 2012 23:03 Hola, Lo que había entendido es que necesitabas calcular la longitud de toda la fila para poder poner una linea separadora. Pero una vez calculada la longitud, defines la longitud de la línea y le pasas el control al write.table para que escriba el data.frame en el fichero. En esa función "contadora" de caracteres, ha de convertir toda la fila a formato "as.character()" de ahí puede venir el error de los "1" que comentas. Por eso no puedes dejar la fila del data.frame convertida as.character antes de escribir en el fichero. De todas formas, si puedes adjuntar varias líneas del data.frame que estás intentando grabar y el código que utilizas, quizás podamos detectar donde está la anomalía. Saludos, Carlos Ortega www.qualityexcellence.es El 25 de abril de 2012 18:31, Eva Prieto Castro <evapcastro@yahoo.es> escribió: Hola: ¿Cómo puedo conseguir una línea horizontal separadora entre la fila correspondiente a los nombres de las columnas y la primera fila de datos?. ¿Hay algo similar a write.table que lo haga, o hay que hacerlo manualmente escribiendo un paste de "_" con la longitud deseada?. El problema es que el dataframe que vuelco, al hacerle un paste con separador "\t", para saber la longitud que debe tener la línea a dibujar, me convierte (como resultado del paste) a valor "1" cada valor de la fila del dataframe. A ver si me pudierais echar un cable. Gracias Eva Prieto Castro [[alternative HTML version deleted]] _______________________________________________ R-help-es mailing list R-help-es@r-project.org https://stat.ethz.ch/mailman/listinfo/r-help-es -- Saludos, Carlos Ortega www.qualityexcellence.es -- Saludos, Carlos Ortega www.qualityexcellence.es -- Saludos, Carlos Ortega www.qualityexcellence.es -- Saludos, Carlos Ortega www.qualityexcellence.es [[alternative HTML version deleted]]
Hola, Partiendo del con.t de Carlos, lo he resuelto del siguiente modo: itf <- function (x) { return(max(x,8*max((round(x/8,0)),1))) } a<-sapply(con.t, itf) Es decir, calculo el nº real de caracteres teniendo en cuenta las tabulaciones que necesita cada componente (1 tabulación = 8 caracteres). Creo que es una solución poco elegante, pero funciona. Un saludo. Eva --- El lun, 30/4/12, Carlos Ortega <cof@ qualityexcellence.es> escribió: De: Carlos Ortega <cof@qualityexcellence.es> Asunto: Re: [R-es] Líneas al hacer write.table Para: "Eva Prieto Castro" <evapcastro@yahoo.es> CC: R-help-es@r-project.org Fecha: lunes, 30 de abril, 2012 18:03 Hola, Con paste0() sí que se puede construir... Mira este código.> options(stringsAsFactors = FALSE) > miLista <- list("Sujeto1", "Parametro1", 24, 26.5) > d<-as.data.frame(miLista);d;X.Sujeto1. X.Parametro1. X24 X26.5 1 Sujeto1 Parametro1 24 26.5> lin.con<-paste0(d, sep="\t") > lin.sin<-paste0(d, sep="") > lin.con; lin.sin[1] "Sujeto1\t" "Parametro1\t" "24\t" [4] "26.5\t" [1] "Sujeto1" "Parametro1" "24" "26.5"> con.t<-nchar(lin.con) > sin.t<-nchar(lin.sin) > con.t; sin.t[1] 8 11 3 5 [1] 7 10 2 4> sum(con.t);sum(sin.t)[1] 27 [1] 23> > lin.con.good<-sum(con.t)-1 > lin.con.good[1] 26>Con paste0() introduces un "\t" al final de cada elemento de cada columna. Por tanto al contar el total de caracteres "reales" de una línea habrá que descontar uno (el último tabulador) que se coloca al final del último elemento de la fila. La longitud "buena" de la línea es lin.con.good.... Saludos, Carlos Ortega www.qualityexcellence.es P.S: Una curiosidad, ¿eres Ana o eres Eva?... El 30 de abril de 2012 17:36, Eva Prieto Castro <evapcastro@yahoo.es> escribió: Gracias, Carlos! Dando un paso más, me interesaría que ese paste tuviera en cuenta las tabulaciones, para que la longitud de la línea sea fiable y al quedar dibujada alcance hasta el final de la fila mostrada. Para lograrlo, he intentado hacer paste(d, collapse="\t"), y también paste(d, sep="\t") pero no logro la longitud real que ocupa la fila al volcarla con: write.table(d,file="tabla2.txt", append=TRUE, quote=FALSE, sep="\t",row.names=FALSE, col.names=FALSE) ¿Se os ocurre alguna idea?. Mil gracias. Eva --- El lun, 30/4/12, Carlos Ortega <cof@qualityexcellence.es> escribió: De: Carlos Ortega <cof@qualityexcellence.es> Asunto: Re: [R-es] Líneas al hacer write.table Para: "Eva Prieto Castro" <evapcastro@yahoo.es> CC: R-help-es@r-project.org Fecha: lunes, 30 de abril, 2012 10:22 Hola, De esta forma sí que funciona:> options(stringsAsFactors = FALSE) > miLista <- list("Sujeto1", "Parametro1", 24, 26.5) > d<-as.data.frame(miLista);d;X.Sujeto1. X.Parametro1. X24 X26.5 1 Sujeto1 Parametro1 24 26.5> paste(d)[1] "Sujeto1" "Parametro1" "24" "26.5">Saludos, Carlos Ortega www.qualityexcellence.es El 30 de abril de 2012 06:54, Eva Prieto Castro <evapcastro@yahoo.es> escribió: Hola, Carlos: Os indico un ejemplo básico referido a mi problema:> miLista <- list("Sujeto1", "Parametro1", 24, 26.5) > miLista[[1]] [1] "Sujeto1" [[2]] [1] "Parametro1" [[3]] [1] 24 [[4]] [1] 26.5> d<-data.frame(miLista) > dX.Sujeto1. X.Parametro1. X24 X26.5 1 Sujeto1 Parametro1 24 26.5> paste(d)[1] "1" "1" "24" "26.5" Un saludo Eva --- El vie, 27/4/12, Carlos Ortega <cof@qualityexcellence.es> escribió: De: Carlos Ortega <cof@qualityexcellence.es> Asunto: Re: [R-es] Líneas al hacer write.table Para: "Eva Prieto Castro" <evapcastro@yahoo.es> CC: R-help-es@r-project.org Fecha: viernes, 27 de abril, 2012 09:28 Hola Eva, Gracias. ¿Puedes pasarnos un par de líneas de ese data.frame para ver qué es lo que produce que cuando utilizas as.character() se conviertan en "1"? Seguramente encontremos otra forma de contar el número de caracteres evitando ese error. Gracias, Carlos Ortega www.qualityexcellence.es El 27 de abril de 2012 07:02, Eva Prieto Castro <evapcastro@yahoo.es> escribió: Hola, Carlos: Lo que necesito es precisamente lo que describes en el primer párrafo. Los datos del data.frame los muestra bien, el problema está en el contaje previo de los caracteres, por causa de ese as.character. Un saludo. Eva Prieto Castro --- El mié, 25/4/12, Carlos Ortega <cof@qualityexcellence.es> escribió: De: Carlos Ortega <cof@qualityexcellence.es> Asunto: Re: [R-es] Líneas al hacer write.table Para: "Eva Prieto Castro" <evapcastro@yahoo.es> CC: R-help-es@r-project.org Fecha: miércoles, 25 de abril, 2012 23:03 Hola, Lo que había entendido es que necesitabas calcular la longitud de toda la fila para poder poner una linea separadora. Pero una vez calculada la longitud, defines la longitud de la línea y le pasas el control al write.table para que escriba el data.frame en el fichero. En esa función "contadora" de caracteres, ha de convertir toda la fila a formato "as.character()" de ahí puede venir el error de los "1" que comentas. Por eso no puedes dejar la fila del data.frame convertida as.character antes de escribir en el fichero. De todas formas, si puedes adjuntar varias líneas del data.frame que estás intentando grabar y el código que utilizas, quizás podamos detectar donde está la anomalía. Saludos, Carlos Ortega www.qualityexcellence.es El 25 de abril de 2012 18:31, Eva Prieto Castro <evapcastro@yahoo.es> escribió: Hola: ¿Cómo puedo conseguir una línea horizontal separadora entre la fila correspondiente a los nombres de las columnas y la primera fila de datos?. ¿Hay algo similar a write.table que lo haga, o hay que hacerlo manualmente escribiendo un paste de "_" con la longitud deseada?. El problema es que el dataframe que vuelco, al hacerle un paste con separador "\t", para saber la longitud que debe tener la línea a dibujar, me convierte (como resultado del paste) a valor "1" cada valor de la fila del dataframe. A ver si me pudierais echar un cable. Gracias Eva Prieto Castro [[alternative HTML version deleted]] _______________________________________________ R-help-es mailing list R-help-es@r-project.org https://stat.ethz.ch/mailman/listinfo/r-help-es -- Saludos, Carlos Ortega www.qualityexcellence.es -- Saludos, Carlos Ortega www.qualityexcellence.es -- Saludos, Carlos Ortega www.qualityexcellence.es -- Saludos, Carlos Ortega www.qualityexcellence.es [[alternative HTML version deleted]]