2017-02-25 6 views
1

私は困難なデータ操作の問題のような感じがしており、何かガイダンスを得ることを望んでいます。strpslit文字配列とデータフレームに同時に変換する

私が扱っていますいくつかの問題があります
dput(test) 
c("<play quarter=\"1\" oncourt-id=\"\" time-minutes=\"12\" time-seconds=\"0\" id=\"1\"/>", "<play quarter=\"2\" oncourt-id=\"\" time-minutes=\"10\" id=\"1\"/>") 

test 
[1] "<play quarter=\"1\" oncourt-id=\"\" time-minutes=\"12\" time-seconds=\"0\" id=\"1\"/>" 
[2] "<play quarter=\"2\" oncourt-id=\"\" time-minutes=\"10\" id=\"1\"/>" 

desired_df 
    quarter oncourt-id time-minutes time-seconds id 
1  1   NA    12    0  1 
2  3   NA    10    NA  1 

  1. 文字列 "ここに私の現在のアレイは、私が取得したいと考えてどのようなデータフレームだけでなく、どのように見えるかのテストバージョンでありますテストには何もないはずのバックスラッシュがありますが、この形式のgsub( "\"、 ""、test)でgsubを使うのは難しかったです。
  2. テスト中のすべての要素が同じ数のエントリを持っているわけではありません.2番目の要素にはtime-secondsがないことに注意してください。データフレームの場合、NAを返すことをお勧めします。

私はstrsplit(test、 "")を使って、異なる列のエンティティの間だけに存在するスペースを最初に分割しようとしましたが、扱いにくいリストのリストが返されました。

+2

これは 'XML'と似ていますか? 'XML'ライブラリで解析するのはなぜですか? – salient

答えて

4

xmlがあります。あなたはそれを解析し、結果にrbindlistを実行することができます。これはおそらく、文字列として名前と値のペアを分割しようとするよりもずっと面倒ではありません。

dflist <- lapply(test, function(x) { 
    df <- as.data.frame.list(XML::xmlToList(x)) 
    is.na(df) <- df == "" 
    df 
}) 

data.table::rbindlist(dflist, fill = TRUE) 
# quarter oncourt.id time.minutes time.seconds id 
# 1:  1   NA   12   0 1 
# 2:  2   NA   10   NA 1 

注:この解決のためにXMLdata.tableパッケージが必要になります。

+0

ありがとう、素晴らしいソリューションリッチ、それを感謝します。 – Canovice

関連する問題