0

我有几百个结构非常简单的 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 中有效地做到这一点?非常感谢!

4

2 回答 2

2

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

于 2013-10-30T16:22:23.540 回答
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.tablewith fill = 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 文件。

于 2013-10-30T18:09:07.100 回答