2012-09-06 60 views
10

有沒有辦法使用data.frame沒有它破壞列名稱?data.frame沒有破壞列名稱

我有以下結構:

$`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 

但使用do.call(data.frame, my_list)後,我得到這個:

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 

(注意有,而不是'在列名)

+0

使用參數'check.names = F ' – mnel

回答

13

你可以通過設置check.names = FALSE來阻止R將名稱更改爲合法有效的名稱。詳情請參閱?data.frame

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

就是這樣,謝謝 – Arg

+2

但是,請注意,您將不得不在反引號中包裝列名,與列表中的名稱相同。 R試圖在默認情況下替換空格的一個原因是它稍後會使一些操作變得更容易(例如,對列名使用tab-completion)。 – neilfws

4

R中的data.frames實際上是列表。因此,這也是有效的:

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

知道這開啓了使用lapply上data.frames,我認爲的可能性是相當酷:

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