【问题标题】:How can I read dates without year using readr?如何使用 readr 读取没有年份的日期?
【发布时间】:2016-12-15 21:36:03
【问题描述】:

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

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

我试着这样读

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 可以处理这样的日期:

> parse_date_time("12-15", "%m-%d")
[1] "0000-12-15 UTC"

readr 有什么方法可以读取此类日期或使用 lubridate?

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

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)

【问题讨论】:

  • 您必须在阅读后添加一年。日期不是没有年份的日期。
  • ...具体读为字符列,paste()在前面一年,然后解析。
  • 谢谢。我应该写而不是日期,例如一年中的一天。我的问题是 readr 是否可以处理这种“日期”。我在我的问题中添加了一些代码,展示了在没有内置阅读器功能的情况下我将如何做到这一点

标签: r readr


【解决方案1】:

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

类似的问题以前也出现过,答案是添加a缺失类型的值,可以是day到月份和年份,或者这里 表示日和月。

参见示例

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> 

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

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> 

【讨论】:

  • 谢谢。我应该写而不是日期,例如一年中的一天。我的问题是 readr 是否可以处理这种“日期”。我在我的问题中添加了一些代码,展示了在没有内置阅读器功能的情况下我将如何做到这一点
  • 所以您仍然坚持“年月”构成日期。他们没有。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-30
  • 1970-01-01
  • 1970-01-01
  • 2011-06-27
  • 1970-01-01
相关资源
最近更新 更多