如何将日期拆分为缺少日期部分的列

How to split a date into columns with date parts missing

提问人:angeliquelinde 提问时间:6/24/2023 最后编辑:jay.sfangeliquelinde 更新时间:6/24/2023 访问量:36

问:

df <- data.frame(ID=1:3, release_date=c('01/01/2020','22/06/2020','2019'))

![enter image description here

如果我像这样拆分列:

df2 <- separate(data = df, col = release_date, into = c("day", "month", "year"))

我明白了:

enter image description here

如何让年份显示在正确的列中?有什么想法吗?

r 日期 分裂

评论


答:

2赞 richarddmorey 6/24/2023 #1

您要使用以下参数:fill

df <- data.frame(ID=1:3, release_date=c('01/01/2020','22/06/2020','2019'))
df |>
  tidyr::separate(
    col = release_date, 
    into = c("day", "month", "year"), 
    fill = "left"
    ) -> df2

结果:

  ID  day month year
1  1   01    01 2020
2  2   22    06 2020
3  3 <NA>  <NA> 2019

评论

0赞 angeliquelinde 6/24/2023
这看起来像我需要的:-)但是,我不明白|>符号?
0赞 jay.sf 6/24/2023 #2

假设“缺少日期部分”意味着只给出年份,在基数 R 中我们可以这样做

s <- strsplit(df$release_date, '/')
u <- lengths(s) == 1
s[u] <- lapply(s[u], \(x) c(rep.int(NA_integer_, 2), x))
cbind(df[1], `colnames<-`(do.call('rbind', s), c("day", "month", "year")))
#   ID  day month year
# 1  1   01    01 2020
# 2  2   22    06 2020
# 3  3 <NA>  <NA> 2019
# 4  4 <NA>  <NA> 2019

如果您想要与 OP 形成对比的数字格式,则可以将结果通过管道传递到

|> type.convert(as.is=TRUE)

数据:

df <- structure(list(ID = 1:4, release_date = c("01/01/2020", "22/06/2020", 
"2019", "2019")), class = "data.frame", row.names = c("1", "2", 
"3", "4"))