2013-10-30 76 views
0

我有幾百的XML文件非常簡單的結構:如何將簡單結構的xml文件轉換爲csv?

NM_000016 3.87178e-09 3:7.8009e-248 14:1.1621e-262 

NM_000018 5.49001e-12 9:1.06231e-154 

NM_001032295 2.5366e-10 14:4.46519e-286 30:1.70136e-17 31:1.26709e-268 

我想將它們轉換成CSV文件,這是從原來的略有不同:

NM_000016 3.87178e-09 3 7.8009e-248 14 1.1621e-262 

NM_000018 5.49001e-12 9 1.06231e-154 

NM_001032295 2.5366e-10 14 4.46519e-286 30 1.70136e-17 31 1.26709e-268  

的區別是: 「:」在「3:7.8009e-248」內被刪除,數字「3」「7.8009e-248」被分配到兩列。

如何在R中有效地做到這一點?非常感謝!

+1

詢問代碼的問題必須證明對所解決問題的最小理解。包括嘗試解決方案,爲什麼他們沒有工作,以及預期的結果。另請參閱:堆棧溢出問題清單。 – villecoder

+0

'XML :: xmlToDataFrame'和'utils :: write.csv' –

+1

您的示例XML看起來不像XML。 XML通常有很多標誌。 – Spacedman

回答

0

沒有真正看到你正在使用的是什麼,這裏有一個建議:

首先,一些樣本數據:

X <- tempfile() 
cat("NM_000016 3.87178e-09 3:7.8009e-248 14:1.1621e-262", 
    "NM_000018 5.49001e-12 9:1.06231e-154", 
    "NM_001032295 2.5366e-10 14:4.46519e-286 30:1.70136e-17 31:1.26709e-268", 
    sep = "\n", file = X) 

使用read.tablefill = TRUE(因爲你的數據似乎是不平衡)。

Y <- read.table(X, header = FALSE, fill = TRUE) 
Y 
#    V1   V2    V3    V4    V5 
# 1 NM_000016 3.87178e-09 3:7.8009e-248 14:1.1621e-262     
# 2 NM_000018 5.49001e-12 9:1.06231e-154        
# 3 NM_001032295 2.53660e-10 14:4.46519e-286 30:1.70136e-17 31:1.26709e-268 

使用我的「splitstackshape」包列方便地拆分成多列。

library(splitstackshape) 
Z <- concat.split.multiple(Y, c("V3", "V4", "V5"), ":") 
Z 
#    V1   V2 V3_1   V3_2 V4_1   V4_2 V5_1   V5_2 
# 1 NM_000016 3.87178e-09 3 7.80090e-248 14 1.16210e-262 NA   NA 
# 2 NM_000018 5.49001e-12 9 1.06231e-154 NA   NA NA   NA 
# 3 NM_001032295 2.53660e-10 14 4.46519e-286 30 1.70136e-17 31 1.26709e-268 

當然,從這裏,它只是write.csv寫入新版本到CSV文件。

+0

在我的情況:X <-myfile.xml,read.table()適用於這樣的X.非常感謝!你們是一個很好的幫助! –

1

正如傑克所說,使用XML :: xmlToDataFrame和utils :: write.csv將有助於如果你的XML文件是正確的。如果沒有,你可能不得不求助於正則表達式查找標籤內的文本,建立數據幀,然後使用write.csv

+0

不要求正則表達式。訴諸用'package:XML'解析XML和所有其他函數。 http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags/1732454#1732454 –

+0

是的,但似乎他的「XML」文件列沒有標籤的數據。 – AwokeKnowing

+0

沒錯。通過查看這些xml文件的內容,他們看起來像txt文件,沒有任何東西像