如何在不使用strptime的情况下转换data.table中的模糊日期时间列?

时间:2017-01-06 18:04:20

标签: r datetime data.table

我的data.table有一个列有"含糊不清的"日期时间格式:" 12/1/2016 15:30"。如何在不使用strptime()的情况下将此日期时间转换为在data.table中识别的格式R,并获取初始转换为POSIXlt的警告消息。这个过程有效,但警告让我觉得还有另一种方式。

我的数据表:

my_dates <- c("12/1/2016 15:30", "12/1/2016 15:31", "12/1/2016 15:32")
this <- c("a", "b", "c")
that <- c(1, 2, 3)

my_table <- data.table(my_dates, this, that)

my_table
   my_dates          this that
1: 12/1/2016 15:30    1    a
2: 12/1/2016 15:31    2    b
3: 12/1/2016 15:32    3    c

my_table[, my_dates := as.POSIXct(strptime(my_dates, "%m/%d/%Y %H:%M"))]

Warning message:
In strptime(my_dates, "%m/%d/%Y %H:%M") :
POSIXlt column type detected and converted to POSIXct. We do not
recommend use of POSIXlt at all because it uses 40 bytes to store one date.

所以,它有效,但我敢打赌,我忽略了一种技术,以避免这种警告。我使用my_table[, dates:= as.POSIXct(dates)]但这会丢弃日期时间的时间部分。我也试过了my_table[, dates:= as.POSIXct(dates, "%m/%d/%Y %H:%M")],时间也被删除了,警告也被重新开始了。

感谢您的建议。

1 个答案:

答案 0 :(得分:6)

我们需要format参数,可以单独使用as.POSIXct进行转换,而无需诉诸strptime/as.POSIXct

my_table[, my_dates := as.POSIXct(my_dates, format = "%m/%d/%Y %H:%M")]
my_table
#              my_dates this that
#1: 2016-12-01 15:30:00    a    1
#2: 2016-12-01 15:31:00    b    2
#3: 2016-12-01 15:32:00    c    3

警告的原因是as.POSIXct/strptime中的参数顺序。如果我们检查?as.POSIXct,则使用

  

as.POSIXct(x,tz =&#34;&#34;,...)

这意味着,如果没有指定format,它会认为第二个参数是tz