You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将POSIXct格式时间戳转换为日期?

问题描述

我的Excel导出的POSIXct时间戳数据如下:

final_sample <- data.frame(
  PN_number = c( "PN101", "PN102", "PN103", "PN104", "PN105"),
  Maturity_date_2018 = c(1518048000, 1516665600, 1518134400, 1518048000, 1520812800),
  Maturity_date_2019 = c("NULL", 1516665600, "NULL", 1518048000, "NULL"),
  Maturity_date_2020 = c(1518048000, "NULL", "NULL", "NULL", 1520812800)
)

我需要把这些时间戳转换为日期格式,尝试了以下代码但结果不准确,还用Excel公式DATE(1970,1,1) + (cell/86400)手动验证过:

final_sample_all <- final_sample %>%
  mutate(across(starts_with("Maturity_date_"), ~ifelse(!is.na(as.numeric(.)),
                                                       as.Date(as.POSIXct(as.numeric(.), origin = "1970-01-01", tz = "UTC"), origin = "1970-01-01"),
                                                       "NULL")))
问题分析与解决

你的代码存在两个关键问题:

  • 数据中的"NULL"是字符串类型,不是R原生的NA,导致类型判断和转换混乱;
  • 转换逻辑冗余,as.Date(as.POSIXct(...))属于多余操作,直接用as.Date()处理数值型时间戳即可。

修正后的代码

library(dplyr)

final_sample <- data.frame(
  PN_number = c( "PN101", "PN102", "PN103", "PN104", "PN105"),
  Maturity_date_2018 = c(1518048000, 1516665600, 1518134400, 1518048000, 1520812800),
  Maturity_date_2019 = c("NULL", 1516665600, "NULL", 1518048000, "NULL"),
  Maturity_date_2020 = c(1518048000, "NULL", "NULL", "NULL", 1520812800)
)

final_sample_all <- final_sample %>%
  # 把字符串"NULL"替换为R的NA
  mutate(across(starts_with("Maturity_date_"), ~ifelse(. == "NULL", NA, .))) %>%
  # 将数值型时间戳转成日期格式
  mutate(across(starts_with("Maturity_date_"), ~as.Date(as.numeric(.), origin = "1970-01-01")))

print(final_sample_all)

结果验证

转换后的日期和Excel公式计算结果完全匹配:

  • 时间戳1518048000 → 2018-02-08
  • 时间戳1516665600 → 2018-01-23
  • 时间戳1518134400 → 2018-02-09
  • 时间戳1520812800 → 2018-03-12

内容的提问来源于stack exchange,提问作者Yhan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 23:17:43