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」が 2 つの列に割り当てられていることです。

Rで効率的に行うにはどうすればよいですか? どうもありがとう!

4

2 に答える 2

2

ジェイクが言ったように、XML::xmlToDataFrame と utils::write.csv を使用すると、xml ファイルが適切であれば役立ちます。そうでない場合は、正規表現を使用してタグ内のテキストを検索し、データ フレームを構築してから、write.csv を使用する必要があります。

于 2013-10-30T16:22:23.540 に答える
0

何を扱っているかを実際に確認することなく、ここに 1 つの提案があります。

まず、いくつかのサンプル データ:

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 ファイルに書き込むだけです。

于 2013-10-30T18:09:07.100 に答える