首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >日/月单位转换(R)

日/月单位转换(R)
EN

Stack Overflow用户
提问于 2020-11-01 08:22:06
回答 2查看 46关注 0票数 0

嘿,大家好,我数据框里的日期是这样的:

代码语言:javascript
运行
复制
0102
0103
0104

这可以翻译为

代码语言:javascript
运行
复制
January 2
January 3
January 4

显示日期显然不是最好的方式,所以我想将其转换为更具可读性的内容。我使用下面的代码来尝试这样做:

代码语言:javascript
运行
复制
as.Date(paste0("2018",date),format="%Y%m%d")

我希望它能将月份和日期分开,让它看起来更干净一些,然后再加上2018年。不过,这是我用同样的三个日期换来的

代码语言:javascript
运行
复制
2018-10-02
2018-10-03
2018-10-04

所以我认为它忽略了日期"0104“中"1”前面的0,所以它将其读作"10-4“而不是"01-04”。有谁有办法解决这个问题吗?谢谢!

EN

回答 2

Stack Overflow用户

发布于 2020-11-01 08:31:48

看起来你是在以numeric的形式读入date,它去掉了前导的0s。你可以使用stringr::str_pad将它们添加回来。

代码语言:javascript
运行
复制
date <- c(0102, 0103, 0104)

as.Date(
  paste0("2018", stringr::str_pad(date, 4, pad = "0")),
  format = "%Y%m%d"
)
#> [1] "2018-01-02" "2018-01-03" "2018-01-04"

但是,最好是以character的形式读取date,这样就不会发生剥离。

票数 1
EN

Stack Overflow用户

发布于 2020-11-01 09:54:24

使用sprintf

代码语言:javascript
运行
复制
x <- c(0102, 0103, 0104, 0110)
as.Date(sprintf('2018%04d', x), '%Y%m%d')
[1] "2018-01-02" "2018-01-03" "2018-01-04" "2018-01-10"

您还可以使用lubridate::ymd更改为日期。

代码语言:javascript
运行
复制
lubridate::ymd(sprintf('2018%04d', x))
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64627612

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档