2012-04-02 11 views
5

Aquí es el código de la muestra, lo que produce una salida interesante:¿Cómo controlar el comportamiento de pegar en data.frame para columnas de tipo entero?

> gg<-data.frame(x=c("a","b"),y=as.integer(c(1000,100000))) 
> gg 
    x  y 
1 a 1000 
2 b 100000 
> apply(gg,1,paste,collapse="") 
[1] "a 1000" "b100000" 
> apply(gg[1,],1,paste,collapse="") 
     1 
"a1000" 

En la primera carrera apply, R alguna manera sabe cómo almohadilla espacios adicionales. ¿Cómo lo hace y es posible controlar este comportamiento?

+0

parece que se está asumiendo que tanto debe atómicas de carácter de la misma longitud. ¿Establecer Ergo sep = [valor] a eso dinámicamente? ¿Cuál es el resultado deseado que quieres? – Hansi

+0

Desde '? Apply'," aplicar intenta forzar [X] a una matriz mediante as.matrix si es bidimensional (por ejemplo, un marco de datos) o mediante as.array ". 'as.matrix()' convierte a character por 'format()', y este tiene un argumento 'trim', que puede intentar cambiar a TRUE para suprimir los espacios en blanco iniciales. – BenBarnes

Respuesta

6

apply solo funciona en una matriz o matriz, por lo que primero tiene que convertir su data.frame en una matriz. as.matrix(gg) crea el relleno.

En cuanto a as.matrix.data.frame, el relleno es causada por una llamada a format (format.default, en realidad), que llama a la larga prettyNum. prettyNum tiene un argumento preserve.width con un valor predeterminado de "common".

Si desea más control sobre este comportamiento, convertir cada columna en su hoja.de.datos a un vector de caracteres antes de llamar apply:

gg[,2] <- as.character(gg[,2]) 
apply(gg,1,paste,collapse="") 
# [1] "a1000" "b100000" 
Cuestiones relacionadas