2014-02-24 182 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" 
相关问题