2015-04-27 69 views
2

我有一個包含多行的txt文件。每行作爲由空格分隔的文本。每行中的列數可能不同。我需要逐一讀取每行,將其放入數據框並打印出來。如何將readLines的輸出轉換爲R中的數據幀

我嘗試這樣做:

x<-readLines("output.txt") 


for (i in 2:length(x)) { 
    data<-data.frame(x[[i]]) 
    print(data) 
} 

我不得不從2號線開始具有因1號線有一些標題信息,我不需要。

例如,這種打印出這樣的事:

x[[2]] 
[1] "        dcserver  AIX  2254438400  587317248 026.05 93752=100.00 HDS93752_VMAX1561_RAID1=100.00 " 

當我這樣做:

data<-data.frame(x[[2]]) 

我得到這個:

dput(data) 

structure(list(x..2.. = structure(1L, .Label = "        dcserver  AIX  2254438400  587317248 026.05 93752=100.00 HDS93752_VMAX1561_RAID1=100.00 ", class = "factor")), .Names = "x..2..", row.names = c(NA, 
-1L), class = "data.frame") 

它看起來像我有一個行和一列,我需要有7列,如下所示:

dcserver  AIX  2254438400  587317248 026.05 93752=100.00 HDS93752_VMAX1561_RAID1=100.00 

任何想法?

+0

您能否詳細說明您期待的「每行中的列數是多少」,或者代碼應該能夠處理什麼樣的事件? – mlegge

+0

@ mkemp6,一行可以有5列用空格隔開,另一行8等。我需要讀每行,轉換成數據幀並打印出來。我需要爲文件中的每一行執行此操作。這些列由空格分隔,但可能是多個空格等不一致,所以我必須對此進行解釋。 – user1471980

回答

0

我肯定有更好的方法,但我已經嘗試這樣做,它爲我工作:

x<-readLines("output1.txt") 

for (i in 2:length(x)) { 
    x<-data.frame(x[[i]]) 
    writeLines(x[[i]],"test.csv") 
    data<-read.csv("test.csv", header=F, sep=" ") 
    df<-data[,colSums(is.na(data)) == 0] 
    print(df) 
} 
4

可以使用的功能:textConnectionread.table

x<-readLines("output.txt") 

for (i in 2:length(x)) { 
    data<-read.table(textConnection(x[[i]])) 
    print(data) 
}