1

新手在这里,第一次发帖(请温柔)。我一直在尝试解决这个问题几个小时,所以终于决定有时间咨询一下。

我有一个用 readxl 导入的大型电子表格。它包含一列日期(格式 dd/mm/yyyy)和几个格式为 hh:mm 的时间列,如图所示:excel

本质上,我希望能够同时导入时间和日期列并将它们组合起来,这样我就可以进行其他一些计算,比如经过的时间。

  • 如果我导入让 R 猜测 col-types,它会将时间转换为 POSIXct,但这些会附加一个 1899 年的日期:R_POSIXct

  • 如果我强制 readxl 将时间列分配给数字,我会得到一个小数(例如 0.315972222 表示 07:35),然后尝试使用类似的语法转换为

    格式(as.POSIXct(Sys.Date() + 0.315972222), "%Y-%m-%d %H:%M:%S", tz="UTC")

IE

df$datetime <- format(as.POSIXct(df$date + df$time), "%Y-%m-%d %H:%M", tz="UTC")

这导致正确的日期,但时间为 00:00,而不是经过的时间。

我试过在这里搜索,发现帖子不是完全相同的问题(例如将日期和时间列组合到 dd/mm/yyyy hh:mm中),并且已经广泛阅读,包括关于 lubridate,但因为我只有 6进入 R 的几个月,我发现一些解释有点神秘。

建议或 ignposting 赞赏(如果有我还没有找到的解决方案)

4

1 回答 1

1

如果您减去 1899-01-01 和 1970-01-01 之间的天数,然后将该(移位的)Excel 数值乘以 3600,您应该接近自 1970 年开始以来的秒数。然后您可以转换为POSIXct 与 as.POSIXct(x, origin="1970-01-01")。然而,这似乎确实是“艰难的道路”

将日期时间转换为 YYYY-MM-DD H:M:S 格式,然后导出为 csv 以作为文本导入 R 会容易得多,而且可能更准确。有一个“POSIXct” colClasses 参数read.csv,尽管它不处理日期和时间的单独列。为此,建议您先导入字符值,然后导入paste日期和时间。然后看你为 as.POSIXct 格式化字符串。dd/mm/yyyy“格式”将由“%d/%m/%Y”指定。

于 2018-04-18T22:06:30.547 回答