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

如何将hms对象列表转为单列DataFrame并保留hms格式?

保留hms格式将列表转换为单列DataFrame的高效方法

问题场景

我有一个由hms对象组成的列表(每个列表元素是仅含hms类型列的DataFrame),想要将其转换为单列DataFrame时保留hms格式,但使用unlist配合map_dfr转换后,结果仅显示为秒数形式的数值,丢失了hms格式。

模拟代码

# 生成模拟数据
date_1 <- date()
date_ms <- date_1 %>% strsplit(., ' ') %>% unlist() %>% .[4]

time_test <- c()

for(i in 1:10000){
  time_test[[i]] <- data.frame(date = hms(date_ms) - i*2)
}

问题重现

执行以下代码后,输出结果为秒数而非预期的hms格式:

map_dfr(time_test, unlist)

# A tibble: 10,000 × 1
    date
   <dbl>
 1    57
 2    55
 3    53
 4    51
 5    49
 6    47
 7    45
 8    43
 9    41
10    39
# … with 9,990 more rows

期望输出

date
1 12H 6M 57S
2 12H 6M 55S
...
...

现有方案及局限

使用map_dfr(time_test, pack)可以得到正确格式,但处理大型列表时速度极慢:

map_dfr(time_test, pack)

       date
1 12H 6M 57S
2 12H 6M 55S
3 12H 6M 53S
4 12H 6M 51S

高效解决方案

推荐两种高效方法,既能保留hms格式,又能快速处理大型列表:

  1. 直接合并DataFrame
    使用dplyr::bind_rows()直接合并列表中的DataFrame,它会自动保留列的hms类型:
library(dplyr)

result <- bind_rows(time_test)
  1. 提取hms向量后转DataFrame
    先提取列表中每个元素的hms值组成向量,再转为DataFrame:
# 提取所有hms元素
hms_vector <- sapply(time_test, function(x) x$date)
# 转为DataFrame
result <- data.frame(date = hms_vector)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 22:09:22