ハムスターに飼われる院生のブログ

自分用メモが中心のブログです。

特定の数値が出現するまでRでデータを読み込む

タブ区切りのデータについて。
データが何行あるかわからない場合を考える。

*----------------------*
1	10	100
2	20	200
5	50	500
10	100	1000
*----------------------*

このようなtxtファイルがあるとする。
read.table()で読み込むと

*----------------------*

の部分が悪さをしてエラーが出るため、以下の関数を作成して読み込んだ。

get_i <- function(filename, target){
	f<-file(filename,"r")
	num<-0
	for(i in 1:10000){
		a<-readLines(con=f,1)
		if(i>1){
			v<-as.vector(as.numeric(strsplit(a,"\t")[[1]]))
			if(v[1]==target){
				return(i)
			}
		}
	}
	return()
}

1行ごとに読み込み、targetとした目的の数値が出たところで読み込みを終了し、
目的の数値が何行目にあるかを返してくる。
今回はskip=1であるから、関数を以下のように使用する。

i<-1
filename<-paste("output",i,".txt",sep="")
n<-get_i(filename, 10)
data<-read.table(filename,skip=1,nrows=n-1,sep="\t")