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

igetnqfo  于 2023-06-27  发布在  其他
关注(0)|答案(2)|浏览(141)
df <- data.frame(ID=1:3, release_date=c('01/01/2020','22/06/2020','2019'))

如果我像这样拆分列:

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

我得到了这个:

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

lskq00tm

lskq00tm1#

你想使用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
cld4siwp

cld4siwp2#

假设,“日期部分缺失”意味着只给出了年份,在基数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"))

相关问题