2011-05-31 52 views
2

R專家,R:如何從txt文件中獲取信息與R

我有一個很大的文本文件,它有特定的模式和格式。

我的text.txt包含

x1 `xx`nkkna`yy`taktnaknvcaklrhkahnktn, altlkhakthakd`xx`nmm cataitha`yy`knkcnaktnhakt 

x2 `xx`ngkna`yy`taktnaknvcaklrhkahnktn, altlkhakthakdnmm cataithaknkcnaktnhakt 

x3 `xx`nkg,kna`yy`taktnaknvcaklrhkahnktn, altlkhakthakdnmm cataithaknk`xx`cna`yy`ktnhakt 

x4 nkkndataktnaknvcaklrhkahnktn, altlkhakthakdnmm cataithaknkcnaktnhakt 

然後,我想問R鍵查找單詞的列表,在這種情況下是X1,X2,X3和X4 而其間的,我希望得到一個列表中的每一個,即介於「xx」和「yy」之間。

因此,其結果將是四個列表

x1 = c("nkkna", "nmm cataitha") 
x2 = c("ngkna") 
x3 = c("nkg,kna", "cna") 
x4 = c("NA") 

不過,我面臨兩個問題想請教您的幫助。

  • 如何看書一個大的文本文件至R?我從計算器的命令

X <學習 - read.csv(textConnection「XXX」)可能會有幫助,但問題是我的文件太大,無法複製過去,並且該文件應被看書作爲csv。有沒有更好的方法來加載我的文本文件到R作爲一個對象,可以搜索和後來的grep?

  • 如何編寫代碼來獲取這些信息?

我學會strsplit也許使用,它似乎在RCurl報廢材料中工作,它也在這裏工作嗎?如果是的話,你能介意教我嗎?

太謝謝你了.....

+1

在第一部分,這個問題有一些很好的信息:http://stackoverflow.com/questions/1727772/quickly-reading-very - 高 - 表-AS-dataframes式-R – Chase 2011-05-31 12:36:00

回答

8

要回答你的第一個問題,閱讀的文本文件,你應該使用功能scan()。您在SO上看到的參考文獻爲textConnection純粹是爲了讀取粘貼到控制檯中的一些示例數據。這是我在做什麼旁邊看了你的數據:

txt <- " 
x1 `xx`nkkna`yy`taktnaknvcaklrhkahnktn, altlkhakthakd`xx`nmm cataitha`yy`knkcnaktnhakt 
x2 `xx`ngkna`yy`taktnaknvcaklrhkahnktn, altlkhakthakdnmm cataithaknkcnaktnhakt 
x3 `xx`nkg,kna`yy`taktnaknvcaklrhkahnktn, altlkhakthakdnmm cataithaknk`xx`cna`yy`ktnhakt 
x4 nkkndataktnaknvcaklrhkahnktn, altlkhakthakdnmm cataithaknkcnaktnhakt" 

dtxt <- textConnection(txt) 

然後我用scan以同樣的方式來讀取數據textConnetion。在你自己的代碼中,你應該修改下面的行,所以tat dtxt是你的文件位置。我把它以這種形式,讓其他人能複製我的結果,而無需他們自己的文件系統上創建一個文件:

dat <- scan(dtxt, what="character", sep="\n") 

現在你已經讀出的數據,這是一個(有點複雜)調用到sapply,strsplitgsub來操縱數據。

sapply(seq_along(dat), 
    function(i)unlist(c(sapply(strsplit(dat[i], "`xx`"), 
       function(x)gsub("^(.*?)`.*", "\\1", x)[-1])))) 

的結果是完全按照您指定:

[[1]] 
[1] "nkkna"   "nmm cataitha" 

[[2]] 
[1] "ngkna" 

[[3]] 
[1] "nkg,kna" "cna"  

[[4]] 
character(0)