2010-06-30 39 views
2

格式由行組成,每行都有一組key =「value」元素。如何將異常數據格式導入到R?

格式示例:

X="1" Y="2" Z="who are you?" 
Y="4" Z="bla bla..." 
X="42" 

我想這個數據導入到R,表或data.frame,其中鍵定義列。

+1

如何記錄(行)定義的? – mbq 2010-06-30 15:29:27

回答

2

下面的代碼解析您在 '融化' 的形式提供的文件:

data<-NULL 
stream<-file("path");open(stream) #or stream<- textConnection(' X="1" Y="2" Z="who are you?" Y="4" Z="bla bla..." X="42"') 
while(length(ele<-c(scan(stream,what="string",n=1,sep="="),scan(stream,what="string",n=1,sep=" ")))>0){ 
    data<-rbind(data,ele); 
} 
close(stream); 
print(data); 

現在結晶:

sapply(unique(data[,1]),function(key) data[data[,1]==key,2]) 
+0

這是行得通的。謝謝! 你可以提供一些提示如何加快速度?讀取40k行大概需要20分鐘,可能是因爲有很多IO操作要硬盤驅動器?我認爲將整個文件讀入字符串並解析它應該會提高性能? – watbywbarif 2010-07-01 11:37:21

+0

還有一個問題,最終的數據結構對於某些事情是可以的,但是我希望有其他格式的數據,其中行重合是守恆的? – watbywbarif 2010-07-01 11:44:24

+0

關於速度,如果你用「」替換「=」,速度會更快。比通過一次掃描(stream,what =「string」,sep =「」)將所有內容讀取爲一系列空格分隔的字符串。 關於節省行數,你能寫更多關於這個文件的結構,你想如何在R中表示它?我認爲一個新的問題將適用於此。 – mbq 2010-07-01 12:47:10