提问人:angeliquelinde 提问时间:6/24/2023 最后编辑:jay.sfangeliquelinde 更新时间:6/24/2023 访问量:36
如何将日期拆分为缺少日期部分的列
How to split a date into columns with date parts missing
问:
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"))
我明白了:
如何让年份显示在正确的列中?有什么想法吗?
答:
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"))
评论