我有一个数据文件,其中的日期没有年份。
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"
有没有什么方法可以读取这样的日期或者可以使用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)
答案 0 :(得分:2)
正如Rich在评论中指出的那样,&#34; date&#34;没有一年是无效的,因为您需要年,月和日期。
这样的问题之前出现了,答案是只添加缺失类型的 值,无论是天到月和年,还是在这里年到日和月。
参见例如
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>