1

私は次のような大きな乱雑なデータファイルを作成します。

1 2  3    4   5 6  7   8 . .
aa bb  ccc d eee     ffff gg h i jj
6      6   5 1 2 3 4 5i      734
33  44x    1234  12  1    9  888  345     12   987765

すべてではありませんが、ほとんどのデータファイルの行には同じ数の要素があります。そのようなデータファイルを読み取り、それをマトリックスまたはデータフレームに変換するための最良の方法は何ですか?

私はreadLinesファイルを読むために使用しています。

また、以前の質問の1つに対する回答から、非対称リストは次の3行を使用して行列に変換できることがわかりました。

R:非対称リストを行列に変換します-各サブリストの要素数が異なります

max.len <- max(sapply(my.data, length))
corrected.list <- lapply(my.data, function(x) {c(x, rep(NA, max.len - length(x)))})
mat <- do.call(rbind, corrected.list)

私は多分私ができると思っていました:

  1. でデータファイルを読み取るreadLines
  2. データセットの各行を個別の要素に分割してから、
  3. データセット全体をリストに変換してから、
  4. 上記の3行を使用してマトリックスを作成します

ただし、手順2で行き詰まります。要素間の空きスペースの数が異なるため、各行を個別の要素に分割する方法がわかりません。さらに、提案された4ステップ戦略は効率的ではないと思います。

この問題についてご協力いただきありがとうございます。

編集

申し訳ありませんが、希望する結果を投稿するのを忘れてしまいました。マトリックスまたはデータフレームに入ると、データは次のようになります。

1   2    3     4   5    6     7    8    .    .
aa  bb   ccc   d   eee  ffff  gg   h    i    jj
6   6    5     1   2    3     4    5i   734  NA
33  44x  1234  12  1    9     888  345  12   987765
4

1 に答える 1

1

strsplitパート2を達成するために使用できますか?

test <- readLines(textConnection("1 2  3    4   5 6  7   8 . .
aa bb  ccc d eee     ffff gg h i jj
6      6   5 1 2 3 4 5i      734
33  44x    1234  12  1    9  888  345     12   987765"))

test <- strsplit(test,"[[:space:]]+")

max.len <- max(sapply(test, length))
corrected.list <- lapply(test, function(x) {c(x, rep(NA, max.len - length(x)))})
mat <- do.call(rbind, corrected.list)

結果:

> mat
     [,1] [,2]  [,3]   [,4] [,5]  [,6]   [,7]  [,8]  [,9]  [,10]   
[1,] "1"  "2"   "3"    "4"  "5"   "6"    "7"   "8"   "."   "."     
[2,] "aa" "bb"  "ccc"  "d"  "eee" "ffff" "gg"  "h"   "i"   "jj"    
[3,] "6"  "6"   "5"    "1"  "2"   "3"    "4"   "5i"  "734" NA      
[4,] "33" "44x" "1234" "12" "1"   "9"    "888" "345" "12"  "987765"
于 2012-07-20T06:27:36.810 に答える