首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用readr读取没有年份的日期?

如何使用readr读取没有年份的日期?
EN

Stack Overflow用户
提问于 2016-12-16 05:36:03
回答 1查看 475关注 0票数 0

我有一个数据文件,其中给出的日期没有年份。

代码语言:javascript
复制
01/05   Fellowship enters Moria
01/09   Fellowship reaches Lorien
01/17   Passing of Gandalf
02/07   Fellowship leaves Lorien
02/17   Death of Boromir

我试着这样读它

代码语言:javascript
复制
lotr <- read_tsv(lotr_file,
                 skip = 9,
                 col_names = c("date", "event"),
                 col_types = cols(
                    date = col_date(format = "%m/%d"),
                    event = col_character()))

但是看起来readr的日期解析器不能在没有年份的情况下解析日期。另一方面,lubridate可以处理这样的日期:

代码语言:javascript
复制
> parse_date_time("12-15", "%m-%d")
[1] "0000-12-15 UTC"

有没有办法让readr读取这样的日期或者使用lubridate呢?

如果readr不能处理这样的“日期”或一年中的某一天,我将按以下方式使用dplyr:

代码语言:javascript
复制
lotr <- read_tsv(lotr_file,
                 skip = 9,
                 n_max = 37,
                 col_names = c("day_of_year", "event"),
                 col_types = cols(
                   day_of_year = col_character(),
                   event = col_character())) %>% 
   mutate(date = parse_date(paste0("2016/",day_of_year))) %>% 
   select(date, event)
EN

回答 1

Stack Overflow用户

发布于 2016-12-16 05:45:09

正如Rich在评论中指出的那样,没有年份的“日期”是无效的,因为您需要年、月和日期。

像这样的问题以前也出现过,答案是只需添加缺失类型的值,可以是日到月和年,或者在这里是年到日和月。

请参见例如

代码语言:javascript
复制
R> vals <- c("01/05", "01/09", "01/17", "02/07", "02/17")  # values
R> yval <- paste0("2000/", vals)  # prefix a year 
R> anytime::anydate(yval)    # needs no format
[1] "2000-01-05" "2000-01-09" "2000-01-17" "2000-02-07" "2000-02-17"
R> 

你可以格式化它们,或者计算差值,或者...两个例子:

代码语言:javascript
复制
R> diff(anytime::anydate(yval))
Time differences in days
[1]  4  8 21 10
R> format(anytime::anydate(yval), "%d-%b")
[1] "05-Jan" "09-Jan" "17-Jan" "07-Feb" "17-Feb"
R> 
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41173724

复制
相关文章

相似问题

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