2015-01-07 7 views
7

readLinesで読んだテキストファイルの小さなデータがあります。ファイルには#のような文字が含まれていました。私はそれがread.tableがそれを読み取ることができなかった理由だと思います。ここでは最初の5行はdputです:文字列を分割してデータフレームを作成

files<-c("\trfinal\t\t", "eq1\t\t\t", "0.ster6\t1.00\t(1.00,1.00)\t.", 
    "1.ster6\t0.65\t(0.47,0.88)\t0.006", "0.parkinson\t1.00\t(1.00,1.00)\t.", 
    "1.ster6#0.parkinson\t1.00\t(1.00,1.00)\t.") 

\tは、文字列の間の空白を意味します。私はこのテキスト行を分割し、4列のグリッド(データフレーム)に入れたいと思います。

私はstrsplit(files, "[\\t]")を試しましたが、本当にそのトリックはありません。どんな助け?

答えて

8

あなたはread.tablecomment.charよう#の治療を無効​​にすることができます

read.table(text=files, sep='\t', comment.char="") 
#     V1  V2   V3 V4 
# 1      rfinal 
# 2     eq1 
# 3    0.ster6 1.00 (1.00,1.00)  . 
# 4    1.ster6 0.65 (0.47,0.88) 0.006 
# 5   0.parkinson 1.00 (1.00,1.00)  . 
# 6 1.ster6#0.parkinson 1.00 (1.00,1.00)  . 
+1

を私は彼らが、ソース(1)で問題を解決することは良いことだと思うが、その所望の出力がやや不明確なまま。 – A5C1D2H2I1M1N2O1R2T1

+0

どうもありがとうございました。どちらのソリューションもうまく機能しました。 – JeanVuda

7

"\t"だけでタブ区切りを表す場合、read.delimを試してみてください。

read.delim(text = files) 
#      X rfinal   X.1 X.2 
# 1     eq1  NA     
# 2    0.ster6 1.00 (1.00,1.00)  . 
# 3    1.ster6 0.65 (0.47,0.88) 0.006 
# 4   0.parkinson 1.00 (1.00,1.00)  . 
# 5 1.ster6#0.parkinson 1.00 (1.00,1.00)  . 

ます。またstringiパッケージを考慮することができます。ここで、私は固定パターンとして"\t"を扱わました:

library(stringi) 
stri_split_fixed(files, "\t", simplify = TRUE) 
#  [,1]     [,2]  [,3]   [,4] 
# [1,] ""     "rfinal" ""   ""  
# [2,] "eq1"     ""  ""   ""  
# [3,] "0.ster6"    "1.00" "(1.00,1.00)" "."  
# [4,] "1.ster6"    "0.65" "(0.47,0.88)" "0.006" 
# [5,] "0.parkinson"   "1.00" "(1.00,1.00)" "."  
# [6,] "1.ster6#0.parkinson" "1.00" "(1.00,1.00)" "." 

全体的には、しかし、それはそうでヘッダーとして扱われることになっとされているものは明らかではありません、@ musically_utの提案を実装する方が良いだろうcomment.charを使用して、ソースで問題を解決しようとしています。