【问题标题】:How to read file with irregular space separated value using fread()?如何使用 fread() 读取具有不规则空格分隔值的文件?
【发布时间】:2015-08-07 13:45:45
【问题描述】:

我正在学习使用data.table。这是一些sample text,我想读成data.table

Date           Col1       Col2
2014-01-01     123        12
2014-01-01     123        21
2014-01-01     124        32
2014-01-01     125        32
2014-01-02     123        34
2014-01-02     126        24
2014-01-02     127        23
2014-01-03     521        21
2014-01-03     123        13
2014-01-03     126        15

read.table 在这里工作正常:

df <- read.table("dat", header=T)

当我尝试使用 data.table 包中的 fread() 时,出现错误:

DT <- fread("dat",header=T)
Error in fread("dat", header = T) : 
  Not positioned correctly after testing format of header row. ch=' '

我也试过设置sep:

DT <- fread("dat",header=T, sep="\t")

但是,结构不正确: 它只有 1 个变量 $Date(应该是 3 个)。

str(DT)
Classes 'data.table' and 'data.frame':  10 obs. of  1 variable:
 $ Date           Col1       Col2: chr  "2014-01-01     123        12" "2014-01-01     123        21" "2014-01-01     124       

这里如何使用fread()

【问题讨论】:

  • 这个答案可能对stackoverflow.com/questions/22229109/…有帮助
  • @bjoseph 谢谢!是的,sed 有效。由于read.table 可以完美地处理数据,我想fread 也应该处理它。如果数据集非常大,sed 方法也可能需要一些时间。如果我们可以让它工作,也许fread 是一个更好的选择。
  • 同意。关于这个github.com/Rdatatable/data.table/issues/964有一些github问题

标签: r data.table


【解决方案1】:

正如this post 中所说,这现在由fread 自动处理(更多信息请参阅README):

require(data.table) #v1.9.5+
fread("~/Downloads/tmp.txt")
#           Date Col1 Col2
#  1: 2014-01-01  123   12
#  2: 2014-01-01  123   21
#  3: 2014-01-01  124   32
#  4: 2014-01-01  125   32
#  5: 2014-01-02  123   34
#  6: 2014-01-02  126   24
#  7: 2014-01-02  127   23
#  8: 2014-01-03  521   21
#  9: 2014-01-03  123   13
# 10: 2014-01-03  126   15

要么更新到最新的开发版本,要么等到 v1.9.6 发布 CRAN。

【讨论】:

  • 我更新到了最新的开发版本,它就像一个魅力。谢谢!
猜你喜欢
  • 2014-04-09
  • 2013-11-07
  • 2018-04-15
  • 1970-01-01
  • 1970-01-01
  • 2017-05-11
  • 1970-01-01
相关资源
最近更新 更多