2011-11-02 14 views
9

Me gustaría ingresar un dataframe en pegar y me gustaría pegarlo para tratarlo como si hubiera ingresado por separado las columnas de ese dataframe. La razón por la que me gustaría hacer esto es porque no estoy seguro de cuántas columnas tendrá mi marco de datos. Aquí tiene 2, pero me gustaría una solución general para tratar con cualquier cantidad de columnas.pegar el método para un dataframe

Mi salida deseada es test1paste en el siguiente código. Pero me gustaría no tener que referirme a las columnas explícitamente. Mi intento de apply fracasa comprensiblemente porque actúa individualmente en las columnas, sin embargo, creo que atraviesa la solución que estoy buscando.

> test1 <- 
+ structure(c(42.71, 41.69, 46.95, 48.85, 45.26, 44.71, 43.71, 
+ 42.69, 47.95, 49.85, 46.26, 45.71), .Dim = c(6L, 2L)) 
> 
> test1paste <- paste(test1[,1],test1[,2], sep = "&") 
> test1paste 
[1] "42.71&43.71" "41.69&42.69" "46.95&47.95" "48.85&49.85" "45.26&46.26" 
[6] "44.71&45.71" 
> 
> apply(test1,MARGIN=2,paste,sep="&") 
    [,1] [,2] 
[1,] "42.71" "43.71" 
[2,] "41.69" "42.69" 
[3,] "46.95" "47.95" 
[4,] "48.85" "49.85" 
[5,] "45.26" "46.26" 
[6,] "44.71" "45.71" 

¿Alguna idea?

Gracias!

+0

¿Tiene esto algo que ver con LaTeX? –

+0

@Roman Sí, lo adivinaste! No estoy usando 'xtable' porque quiero que los errores estándar estén debajo de las estimaciones entre paréntesis. –

+0

Me lees como un libro abierto. :) –

Respuesta

7

¿Qué tal esto:

> apply(test1,1,paste,collapse="&") 
[1] "42.71&43.71" "41.69&42.69" "46.95&47.95" "48.85&49.85" "45.26&46.26" 
[6] "44.71&45.71" 
+0

gracias eso es exactamente lo que necesito. –

8

Si su "trama de datos" es en realidad un data.frame (y no un matrix como en el ejemplo), se puede usar do.call directamente:

testdf <- as.data.frame(test1) 
do.call(paste, c(testdf, sep="&")) 

Esto se basa sobre el hecho de que un data.frame es un glorificado list, y do.call toma una lista de argumentos. Acabo de agregar el argumento sep a la lista ...

Pequeña advertencia: si el nombre de alguna columna es "sep" o "colapso", podría tener problemas. La eliminación de los nombres de las columnas ayudaría en ese caso:

do.call(paste, c(unname(testdf), sep="&")) 
+0

¡gracias! Necesito aprender 'do.call' ya que me parece extremadamente útil. Y me disculpo por usar una matriz como ejemplo sin ser explícito en cuál estaba interesado. Gracias por su cuidadosa solución. –

Cuestiones relacionadas