2012-09-06 19 views
10

¿Hay alguna manera de usar data.frame sin arruinar los nombres de las columnas?data.frame sin arruinar los nombres de las columnas

He siguiente estructura:

$`Canon PowerShot` 
[1] 9.997803e-01 9.997318e-01 3.327920e-01 3.327920e-01 9.988220e-01 
[6] 4.030871e-05 4.928497e-05 

$`Casio Exilim` 
[1] 5.322024e-06 9.999646e-01 5.322024e-06 5.322024e-06 9.999646e-01 
[6] 5.322024e-06 9.999646e-01 

$FinePix 
[1] 3.850036e-05 9.998887e-01 6.650074e-02 6.650074e-02 9.998465e-01 
[6] 9.998465e-01 4.345598e-05 

$`Kodak EasyShare` 
[1] 3.548812e-05 9.998604e-01 3.996137e-01 3.996137e-01 9.987841e-01 
[6] 3.179604e-05 2.789861e-05 

$`Nikon Coolpix series` 
[1] 9.156401e-02 9.998091e-01 1.995972e-01 1.995972e-01 9.996341e-01 
[6] 7.033741e-05 8.499410e-05 

pero después de usar do.call(data.frame, my_list), me sale esto:

Canon.PowerShot Casio.Exilim  FinePix Kodak.EasyShare 
1 9.997803e-01 5.322024e-06 3.850036e-05 3.548812e-05 
2 9.997318e-01 9.999646e-01 9.998887e-01 9.998604e-01 
3 3.327920e-01 5.322024e-06 6.650074e-02 3.996137e-01 
4 3.327920e-01 5.322024e-06 6.650074e-02 3.996137e-01 
5 9.988220e-01 9.999646e-01 9.998465e-01 9.987841e-01 
6 4.030871e-05 5.322024e-06 9.998465e-01 3.179604e-05 
7 4.928497e-05 9.999646e-01 4.345598e-05 2.789861e-05 
    Nikon.Coolpix.series 
1   9.156401e-02 
2   9.998091e-01 
3   1.995972e-01 
4   1.995972e-01 
5   9.996341e-01 
6   7.033741e-05 
7   8.499410e-05 

(. En cuenta que hay en lugar de '' en los nombres de columna)

+0

utilizar el argumento 'check.names = F ' – mnel

Respuesta

13

Usted puede detener R cambiando los nombres a nombres sintácticamente válidos configurando check.names = FALSE. Ver ?data.frame para más detalles.

# assuming your data is in a list called my_list 
do.call(data.frame, c(my_list, check.names = FALSE)) 
+0

eso es todo, gracias – Arg

+2

Sin embargo, tenga en cuenta que tendrá que ajustar los nombres de las columnas en los respaldos, al igual que los nombres en la lista. Una razón por la que R intenta reemplazar espacios de manera predeterminada es que hace que algunas operaciones sean más fáciles más adelante (por ejemplo, cuando se usa tab-completion para nombres de columnas). – neilfws

4

data.frames en R son en realidad listas. Por lo tanto, esto también es válido:

data.frame(my_list, check.names = FALSE) 

Sabiendo esto abre la posibilidad de utilizar lapply en data.frames, que creo que está muy bien:

my_data <- data.frame(my_list, check.names = FALSE) 
lapply(my_data, IQR) 
Cuestiones relacionadas