导入单独的日期和时间(hh:mm)excel列,用于计算时间

时间:2018-04-18 21:38:43

标签: r excel date time readxl

新手在这里,第一篇文章(请温柔)。我一直试图解决这个问题几个小时,所以最后决定时间提出建议。

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

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

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

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

      

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

  

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

导致日期正确,但时间为00:00,而不是传递的时间。

我试过在这里搜索并发现帖子不是完全相同的问题(例如Combining date and time columns into dd/mm/yyyy hh:mm),并且已经广泛阅读,包括关于lubridate,但是因为我只有6个月进入R,我发现一些解释有点神秘。

建议或点燃赞赏(如果有解决方案,我没有找到)

1 个答案:

答案 0 :(得分:1)

如果你减去1899-01-01和1970-01-01之间的天数,然后将那个(移动的)Excel数值乘以3600,你应该接近自1970年开始以来的秒数。你可以然后使用as.POSIXct(x,origin =“1970-01-01”)转换为POSIXct。这似乎是“艰难的方式”,但是

将日期时间转换为YYYY-MM-DD H:M:S格式然后导出为csv以作为文本导入到R中会更容易且可能更准确。 free(sparseMatrix ); sparseMatrix = malloc(sizeof(float) * nbRow*nbColum); 有一个“POSIXct”colClasses参数,但它不处理日期和时间的单独列。为此,建议您输入字符值,然后read.csv日期和时间。然后看你为as.POSIXct格式化字符串。 dd / mm / yyyy“格式”将由“%d /%m /%Y”指定。