如何将结构简单的xml文件转换为csv?

时间:2013-10-30 15:57:15

标签: xml r csv

我有几百个结构非常简单的xml文件:

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中高效地完成?非常感谢!

2 个答案:

答案 0 :(得分:1)

正如jake所说,如果您的xml文件恰到好处,使用XML :: xmlToDataFrame和utils :: write.csv会有所帮助。如果没有,您可能不得不求助于正则表达式来查找标签内的文本,构建数据框,然后使用write.csv

答案 1 :(得分: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文件。