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

如何解决R中Arrow表字符串转时间戳返回NA的问题

解决Arrow表中字符串转时间戳返回NA的问题

问题原因

Arrow表通过Arrow计算引擎执行dplyr操作,不支持直接使用R基础包的strptime()函数——该函数无法被Arrow引擎解析执行,因此返回NA值。而原生data.frame使用R本地引擎,所以strptime()能正常工作。

解决方案

使用Arrow兼容的时间转换函数,推荐三种方式:

方式1:使用适配后的as.POSIXct()

Arrow对as.POSIXct()做了引擎适配,可直接在Arrow表的mutate()中使用:

library(arrow)
library(dplyr)

df <- data.frame(
  timestamp_origin = c("1/9/2023 5:52:34 PM", "1/9/2023 5:52:40 PM"),
  value = c(128.094, 128.094)
)

df |> 
  arrow_table() |> 
  mutate(
    timestamp = as.POSIXct(
      timestamp_origin, 
      format = "%m/%d/%Y %I:%M:%S %p", 
      tz = "CET"
    )
  ) |> 
  collect()

方式2:使用Arrow原生parse_datetime()函数

这是Arrow专门的日期时间解析函数,性能更优,适合处理大型数据集:

df |> 
  arrow_table() |> 
  mutate(
    timestamp = parse_datetime(
      timestamp_origin, 
      format = "%m/%d/%Y %I:%M:%S %p", 
      tz = "CET"
    )
  ) |> 
  collect()

进阶优化:读取CSV时直接转换类型

如果是处理大型CSV文件,推荐在读取阶段就指定列类型,避免后续转换,大幅提升效率:

read_csv_arrow(
  "your_large_file.csv",
  col_types = schema(
    timestamp_origin = timestamp("%m/%d/%Y %I:%M:%S %p", tz = "CET"),
    value = float64()
  )
)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 14:25:17