2014-02-24 181 views
2

我想讀一個txt文件爲R讀取一行文件爲R在FREAD函數read.table或

這個文件只有文件中的行,這樣

1 NYC 2013-12-30 82 PM2.5 Ⅱ fair 2 London 2013-12-30 66 PM10.0 Ⅱ good 

有真不是\ n的這個文件,和所有我要的是將這些信息

這樣的data.table:

1 NYC 2013-12-30 82 PM2.5 Ⅱ fair 
2 London 2013-12-30 66 PM10.0 Ⅱ good 

呂克kily,文件中沒有NAs,我也確定每個觀察值都有7個字段。我可以用fread來實現嗎?

或read.table?

我想這

test <- read.table("1.txt) # the file name.. 
test <- matrix(test, ncol = 7) 

scanas.array。全部失敗。

你能提出一些建議嗎?

非常感謝!

回答

2

在Linux和data.table 1.8.11我會怎麼做:

fread("sed -r 's/(([^ ]+ +){7})/\\1\\n/g' yourfile | sed 's/ $//'") 
+0

哎唷!使用'sed'是「awk」病房:-) –

+0

@CarlWitthoft更好的'awk'或其他解決方案是非常受歡迎的 - 這對我來說看起來相當簡單,但是後來我很多 – eddi

+0

道歉使用'sed'和'regex'。我的整個評論純粹是一個unix笑話。 –

3

最簡單的事情可能就是直接使用scan。你也可以使用read.fwf,但我認爲這更復雜。

> data.frame(matrix(scan('2.txt', what='character'), nrow=2, byrow=TRUE)) 
Read 14 items 
    X1  X2   X3 X4  X5 X6 X7 
1 1 NYC 2013-12-30 82 PM2.5 || fair 
2 2 London 2013-12-30 66 PM10.0 || good 
+1

約定:只有當你使用'read.fwf'在某些所需字段中間留有空格(因此不能使用默認分隔符)。如果OP在那裏說「布宜諾斯艾利斯」,他將不得不加倍努力。 –

1

下面是與scan第二種方式:

t(do.call(rbind, scan(text=t, what=replicate(7, character())))) 
#  [,1] [,2]  [,3]   [,4] [,5]  [,6] [,7] 
# [1,] "1" "NYC" "2013-12-30" "82" "PM2.5" "?" "fair" 
# [2,] "2" "London" "2013-12-30" "66" "PM10.0" "?" "good" 
相關問題