【问题标题】:write.csv in R is converting my dates into a 10 digit integerR 中的 write.csv 将我的日期转换为 10 位整数
【发布时间】:2019-01-07 00:32:49
【问题描述】:

在 Excel 中,我创建了一个包含 1000 行的 Year End Date 列,其中每个单元格的内容都是 2018 年 12 月 31 日。我将其格式化为 Excel 中的日期。我将这一切都拉到 R 中,对其他列进行了一些数据操作,而不是日期列,并使用 write.csv 导出了最终的数据框。当我打开最终文件(在 Excel 或 Tableau 中)时,我的整个年终日期列在每个单元格中都是 1546214400。

为什么会这样?我该如何解决?

谢谢!

【问题讨论】:

  • 看看 posixct 函数和 origin 参数。

标签: r csv date export-to-csv date-conversion


【解决方案1】:

每个软件程序存储日期(或日期时间)为数字,但会以人类熟悉的日期格式显示这个数字。

当您将数据读入 R 时,您使用的任何函数都足够“智能”,可以知道“12/31/2018”是日期“2018 年 12 月 31 日”,而不是字符串“1, 2, /, 3, ...”全部粘贴在一起。 R 存储日期的一种方式是作为 POSIXct 对象。我们可以看到 R 将日期“12/31/2018”存储为 POSIXct 整数 1546214400:

as.integer(as.POSIXct(as.Date("2018/12/31")))
> 1546214400

要使用write.csv() 以使Excel 熟悉日期的方式导出数据,您首先需要将POSIXct 值1546214400 格式化为日期格式。因此,如果您的数据位于名为 mydf 的数据框中,并且日期列名为 date,请执行以下操作:

mydf$date <- format(mydf$date, "%m/%d/%Y")
write.csv(mydf, file="path/to/file.csv")

【讨论】:

    【解决方案2】:

    如果您传入列类型,您可以控制列格式。 \

    coltypes <- cols( col1 = col_double(), col2 = col_double(), col3 = col_date(format ="%Y%m%d"), col4 = col_double())
    

    然后在您指定每一列应该是什么之后,像这样读取 CSV: /

    myData <- readr::read_csv("myCSV.csv", col_types = coltypes)
    

    【讨论】:

      猜你喜欢
      • 2019-04-22
      • 1970-01-01
      • 2018-10-29
      • 1970-01-01
      • 2015-07-09
      • 2018-04-08
      • 1970-01-01
      • 2013-04-23
      • 2021-10-09
      相关资源
      最近更新 更多