2015-01-07 14 views
7

readLines aracılığıyla okunan bir metin dosyasından küçük bir veri sahibim. Dosya # gibi karakterlere sahipti ve bence read.table okumayı başaramadı. İşte ilk beş satır dput edilir: Dize satırlarını böl ve veri karesi oluştur

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 dizeleri arasındaki boşluk anlamına

. Bu metin satırlarını bölmek ve 4 sütun ızgarasına (veri çerçevesi) koymak istiyorum.

strsplit(files, "[\\t]")'u denedim, ancak gerçekten hile yapmıyor. Herhangi bir yardım ? "\t" sadece bir sekme sınırlayıcı temsil ediyorsa

cevap

8

Sen read.table içinde comment.char olarak # tedavisini devre dışı bırakabilirsiniz:

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

Onları kaynağından (1) de sorunu çözmek için ancak istenen çıkış biraz belirsiz için daha iyi olacağını düşünüyorum. – A5C1D2H2I1M1N2O1R2T1

+0

İkinize de çok teşekkür ederim. Her iki çözüm de iyi çalıştı. – JeanVuda

7

, read.delim deneyin: Ayrıca stringi paketini düşünebiliriz

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)  . 

.

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)" "." 

Genel olarak, olsa, bu böyle devam başlık olarak kabul ve olması gerekiyordu ne olduğu belli değil ve @ musically_ut önerisini uygulamak için daha iyi olurdu: Burada, bir sabit desen olarak "\t" tedavi ettik comment.char kullanımı hakkında ve sorunu kaynakta çözmeye çalışıyor.

İlgili konular