【问题标题】:How can I read with R data.table a csv with dates如何使用 R data.table 读取带有日期的 csv
【发布时间】:2017-11-09 14:52:29
【问题描述】:

如何使用 data.table 库完美读取这种有日期的 CSV?

date
2011-12-31T12:00:00Z
2011-12-31T13:00:00Z
2011-12-31T14:00:00Z
2011-12-31T15:00:00Z
2011-12-31T16:00:00Z
2011-12-31T17:00:00Z
2011-12-31T18:00:00Z
2011-12-31T19:00:00Z

我遇到的问题是无法识别日期格式:

fread 中的警告消息:在第 2 行开始数据输入并丢弃第 1 行,因为它的列名或数据项太少或太多:日期

我用来读它:

data<-fread(data.csv,header=T)

而返回的data.table是:

2011-12-31T12   00  00Z
2011-12-31T13   0   00Z
2011-12-31T14   0   00Z
2011-12-31T15   0   00Z
2011-12-31T16   0   00Z
2011-12-31T17   0   00Z
2011-12-31T18   0   00Z 

谢谢!

【问题讨论】:

    标签: r data.table


    【解决方案1】:

    您可以尝试将您的安装更新到data.table(1.10.5+)的开发版本; sep 检测逻辑最近有所改进:

    # if this doesn't work for you, check the Installation page on GitHub
    install.packages('data.table', type = 'source',
                     repos = 'http://Rdatatable.github.io/data.table')
    

    您的文件无需任何其他输入即可读取:

    fread('date
    2011-12-31T12:00:00Z
    2011-12-31T13:00:00Z
    2011-12-31T14:00:00Z
    2011-12-31T15:00:00Z
    2011-12-31T16:00:00Z
    2011-12-31T17:00:00Z
    2011-12-31T18:00:00Z
    2011-12-31T19:00:00Z
    ')
    #                    date
    # 1: 2011-12-31T12:00:00Z
    # 2: 2011-12-31T13:00:00Z
    # 3: 2011-12-31T14:00:00Z
    # 4: 2011-12-31T15:00:00Z
    # 5: 2011-12-31T16:00:00Z
    # 6: 2011-12-31T17:00:00Z
    # 7: 2011-12-31T18:00:00Z
    # 8: 2011-12-31T19:00:00Z
    

    【讨论】:

      【解决方案2】:

      我找到了解决办法:

      data<-fread("data.csv",sep=",")
      

      【讨论】:

      • sep = '\n' 更健壮
      • 为什么更健壮?
      • sep = ',' 适用于您的文件(如所示,是的),但在一个可能有数百万行和数百列的文件中,很难知道您碰巧选择的 sep 可能在哪里意外出现。 sep = '\n' 避免了这一点。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-03-11
      • 2011-04-03
      • 2022-01-01
      • 1970-01-01
      • 2014-10-09
      • 1970-01-01
      • 2020-08-12
      相关资源
      最近更新 更多