2014-04-01 94 views
-1

我有一個文本文件中的數據集,它只有2列但數據中有多個分節符,我想將其放入單獨的數組中,其中數組的名稱是在「Ran:」旁邊的第二列中的文本。下面是一個樣本數據集:R:如何根據部分分開外部文本數據

ABCDEFG 
Authored by test 
Ran: Efg$ 
Test: num85 
1  50 
2  52 
3  54 
Ran: pg2 
Test: num85 
1  40 
2  60 
3  80 
Ran: #2 
Test: num85 
1  14 
2  15 
3  16 

我使用strsplit功能如下嘗試:

header = readLines("C:/My Documents/DVH Test.txt", n=17) 
data = read.table("C:/My Documents/DVH Test.txt", skip=16, 
col.names = c("bin", "value")) 

data.split = strsplit(data, "R") 

我不知道如果我即使使用正確的方法。

任何建議,將不勝感激。

在此先感謝。

好吧,我已經試過這一點,但我發現了一個空載體和元素不排隊像你:

data = scan("C:/My Documents/DV.txt", what="raw") 

dat = readLines(textConnection(data)) 
dat = dat[!grepl("Ran",dat)] 
dat.split = lapply(split(dat,cumsum(grepl("Test:",dat))), 
    function(x) 
     read.table(text=x,header=TRUE)) 

回答

1

試試這個,例如:

txt ='Ran: Efg$ 
Test: num85 
1  50 
2  52 
3  54 
Ran: pg2 
Test: num85 
1  40 
2  60 
3  80 
Ran: #2 
Test: num85 
1  14 
2  15 
3  16' 
## read all lines 
ll <- readLines(textConnection(txt)) 
## remove "Ran"'s lines 
ll <- ll[!grepl('Ran',ll)] 
## split list in each headr an read it using 
## read.table(text=...) 
lapply(split(ll,cumsum(grepl("Test:",ll))), 
     function(x) 
     read.table(text=x,header=TRUE)) 

這給data.frame的名單:

$`1` 
    Test. num85 
1  1 50 
2  2 52 
3  3 54 

$`2` 
    Test. num85 
1  1 40 
2  2 60 
3  3 80 

$`3` 
    Test. num85 
1  1 14 
2  2 15 
3  3 16 
+0

您好,感謝您的解決方案,但我似乎無法得到的元素來排隊,我得到了一個空載體。我上面做了一些編輯。有什麼建議麼? – crazian