R语言将字符型Duration列转为hms时长类型时如何保留原数据框全部列
问题原因
执行X2020_07 <- as.duration(hms(X2020_07$Duration))时,赋值符号右侧生成的是仅包含转换后时长值的单列向量,直接将整个X2020_07数据框对象覆盖替换,才会导致其余18列全部丢失。
可行解决方案
只需要针对数据框内的Duration列单独赋值修改,不要直接覆盖整个数据框对象即可,以下是两种常用实现方式:
基础R原生写法
无需加载除lubridate外的额外依赖,直接索引目标列赋值,所有未修改的列会完整保留:
library(lubridate) # 仅修改Duration列,其余列不受影响 X2020_07$Duration <- as.duration(hms(X2020_07$Duration))
dplyr管道流写法
如果日常使用tidyverse生态的函数做数据处理,可以用mutate()函数定向修改指定列,代码可读性更强:
library(lubridate) library(dplyr) X2020_07 <- X2020_07 %>% mutate(Duration = as.duration(hms(Duration)))
注意事项
- 转换前建议先核查
Duration列的字符格式,确认所有值符合时:分:秒的hms解析规则,避免解析失败生成多余NA值 - 转换完成后可执行
str(X2020_07)查看数据框整体结构,确认19列完整保留、Duration列类型符合预期 - 如果你不需要转成
duration类型(duration以秒为单位存储数值型时长,hms类型自带时分秒格式化显示效果),可以直接去掉外层的as.duration(),代码调整为:
# 保留hms类型的写法 X2020_07$Duration <- hms(X2020_07$Duration)
内容的提问来源于stack exchange,提问作者mikeah21
相关产品推荐
相关产品推荐

