【问题标题】:How to change a timestamp from character to datetime in R and add missing timestamps如何在 R 中将时间戳从字符更改为日期时间并添加缺失的时间戳
【发布时间】:2021-08-26 17:01:26
【问题描述】:

我有一个包含不同列的数据框。 一列称为“TIMESTAMP”。点击栏目,我看是一个字符,往下看就是内容:

TIMESTAMP             Price
2003-06-20 09:19:00   5.25
2003-06-20 09:21:00   5.34
2003-06-20 09:22:00   5.43
2003-06-20 09:23:00   5.32

我想将完整的“TIMESTAMP”列转换为as.POSIXct 这样做的原因是,我想随后在列中添加缺少的分钟,正如您从第 1 行到第 2 行看到的那样,09:20:00 缺少时间戳。我想将09:00:00 缺少的分钟添加到17:30:00,当然还有正确的日期。

我们将数据框称为data。 我试过as.POSIXct(data$TIMESTAMP, format="%Y-%m-%d %H:%M:%S"),但我不确定它是否成功,因为数据框中的数据没有改变。

是否还有提示如何在获取正确格式后添加缺少的时间戳?

感谢您的帮助!

【问题讨论】:

    标签: r datetime timestamp format


    【解决方案1】:

    只要您将结果分配回数据框的列,您的尝试就是正确的。这是你应该做的:

    > data$TIMESTAMP <- as.POSIXct(data$TIMESTAMP, format="%Y-%m-%d %H:%M:%S")
    

    之后,TIMESTAMP 列将具有所需的类:

    > class(data$TIMESTAMP)
    [1] "POSIXct" "POSIXt" 
    

    为了完成缺少行的数据框,您可以首先使用所有预期时间构建一个新的data.frame,然后将其合并到您的初始数据中。下面我使用minmax 来查找日期时间的范围,然后我使用seq.POSIXt 按分钟生成完整的日期时间集。然后,合并将使用您的初始数据框中已经存在的价格值:

    > data_full <- data.frame(TIMESTAMP = seq.POSIXt(from=min(data$TIMESTAMP), to=max(data$TIMESTAMP), by='min'))
    > data_complete <- merge(data_full, data, all.x = T)
    

    【讨论】:

    • 感谢您的帮助!另一个简短的问题......如果我有像14:10:30.54 这样的时间,那么最后有毫秒,我如何在没有毫秒的情况下得到结果,例如14:10:30?
    • 上述答案中使用的as.POSIXct 函数将丢弃毫秒,如本例所示:&gt; as.POSIXct('2003-06-20 09:19:00.435', format="%Y-%m-%d %H:%M:%S")ẁhich 领先[1] "2003-06-20 09:19:00 CEST"
    猜你喜欢
    • 2023-03-31
    • 2021-12-03
    • 2022-01-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-09-28
    • 1970-01-01
    相关资源
    最近更新 更多