2013-03-15 161 views
0

我是R的相對新手。我搜索了最後兩個工作日,試圖找出這個問題並且失敗了。我有一個函數生成的因素列表。我有不同長度的列表中有9個項目。打印數據框列表

>summary(list_dataframes) 
     Length Class Mode 
[1,] 1757 factor numeric 
[2,] 1776 factor numeric 
[3,] 1737 factor numeric 
[4,] 1766 factor numeric 
[5,] 1783 factor numeric 
[6,] 1751 factor numeric 
[7,] 1744 factor numeric 
[8,] 1749 factor numeric 
[9,] 1757 factor numeric 

部分數據的樣本,因爲它出來:

list_dataframes

[[1]] 

[1] 1776234_at 1779003_at 1776344_at 1777664_at 1772541_at 1774525_at 

[[2]] 

[1] 1771703_at 1776299_at 1772744_at 1780116_at 1775451_at 1778821_at 

[7] 1774342_at 

[[3]] 

[1] 1780116_at 1776262_at 1775451_at 1780200_at 1775704_at 

我不知道爲什麼它說的模式爲 「數字」。單個條目是數字和字母組合,如「S35_at」。

我想把它變成一個由9列和1783行組成的表格,而不會產生重複的值。 (因此我嘗試了使用do.call,但它沒有奏效,最後我得到了一堆亂七八糟的東西)。較短的可以在空格中有NAs,或者是空白的。

我需要能夠最終得到我可以放入電子表格的內容。

必須有一種方法來做到這一點。謝謝!

我想我應該加入它最初是作爲數據框出來時,我有四列的數據,但我只需要一列的數據,當我創建此列表的功能創建只有一列我實際上它似乎不再是一個數據框。

dput(head(list_dataframes)) 
list(structure(c(3605L, 5065L, 3663L, 4349L, 1655L, 2700L, 5692L, plus many more 
.Label = c("1769308_at", 
"1769311_at", "1769312_at", "1769313_at", "1769314_at", "1769317_at", plus many more 
this pattern is repeated nine more times 

我所試圖做的是產生一個表是這樣的:

a= xyz,tuv,efg,hij,def 
b= xyz,tuv,efg 
c= tuv,efg,hij,def 

我想提出的是一個表,它是

a b c 
xyz xyz tuv 
tuv tuv efg 
efg efg hij 
hij NA NA 
NA NA NA 

NA could be blank as well. 

大量的閱讀後列表中的手冊部分我確定我已經生成了一份埋藏清單清單。它有九個項目,我想要埋入兩層的數據,即看到它,我不得不使用[[1]]。另外,由於R中的某些內容導致單列數據幀成爲一個因素,而不是保留數據幀,因此它變得更加複雜。爲了解決它(有點)我在我的等式中增加了一個步驟,以便將該因素改爲數據框。

之後,當我使用lapply生成我的結果時,至少因子問題已解決。然後,我可以使用以下步驟將數據幀拉出。

first <- list_dataframes[[1]] 
second <- list_dataframes[[2]] 
third <- list_dataframes[[3]] 
fourth <- list_dataframes[[4]] 
fifth <- list_dataframes[[5]] 
sixth <- list_dataframes[[6]] 
seventh <- list_dataframes[[7]] 
eighth <- list_dataframes[[8]] 
nineth <- list_dataframes[[9]] 

all_results <- cbindX(first,second,third,fourth,fifth,sixth,seventh, eighth,nineth) 

然後我可以使用write.csv編寫csv文件並獲得我以後的正確結果。所以我想我有我的答案。我的意思是現在它工作。

但是我仍然認爲我錯過了使這項工作達到最佳狀態的東西,即使它現在給了我以後的正確結果。

+0

也許發佈一個可重現的例子,顯示數據集的一個子集,可能有10-20行。 – 2013-03-15 19:09:49

+0

該數據的重疊程度非常有限。您的初始描述表明高度重疊。謹慎澄清? – 2013-03-15 20:40:55

+0

這是我正在研究的事物清單,這些清單具有一定的價值,使其具有重要意義。這些子集全部來自4500個相同的較大集合,並且它們之間有一些重疊但不是很多。 do.call中的重複問題是,我將在最終列集中有50或60個副本。我可以手動將它們從電子表格中刪除,但這會挫敗學習編程的重點。 – 2013-03-15 21:31:17

回答

1

因子類變量是整型模式的向量,附加屬性是一個字符向量,指定要在顯示整數值時使用的標籤。我認爲將這些綁定在一起的最安全的方法是將因子列轉換爲字符類,然後轉換爲mergeall=TRUE。爲什麼不發佈包含三個數據框或因素的簡單示例...我無法真正從長度爲10,9和8的摘要輸出中辨別出結構,這種結構在數據中具有任何複雜程度?

如果你想使他們所有的因素了一套共通的水平,然後使用此:

shared_levels <- unique(c(unlist(lapply(list_dataframes)))) 
length(shared_levels) 
new_list <- lapply(list_dataframes, factor, levels=shared_levels) 

正如評論所說,我還是不明白你想象中產生什麼樣的表。需要一個具體的例子。

+0

這是我的想法,謝謝! – 2013-03-15 20:18:08

+0

我試圖改變因子列轉換爲字符類,但我只能改變模式。我應該怎麼做? – 2013-03-16 21:52:39

+0

你應該發佈'dput(head(object))',這樣就有一個可重複的例子。打印的輸出不表明這些是因素,因爲沒有打印任何等級。將因子轉換爲字符的函數是'as.character'。 – 2013-03-16 21:56:37