r - 如何使用 R 清理数据框中混乱的日期格式
问题描述
什么是清理具有多种日期格式的列并仅获取年份的快速方法?假设r
有一个dataframe
(df)
如下所示的,其中有一Date
列characters
具有不同的日期格式。
df <- data.frame(z= paste("Date",seq(1:10)), Date=c("2000-10-22", "9/21/2001", "2003", "2017/2018", "9/28/2010",
"9/27/2011","2019/2020", "2017-10/2018-12", "NA", "" ))
df:
z Date
1 Date 1 2000-10-22
2 Date 2 9/21/2001
3 Date 3 2003
4 Date 4 2017/2018
5 Date 5 9/28/2010
6 Date 6 9/27/2011
7 Date 7 2019/2020
8 Date 8 2017-10/2018-12
9 Date 9 NA
10 Date 10
使用 r 命令从日期列中提取年份(例如 2003 年、2010 年)的快速方法是什么?连续两年的单元格将选择第一年。
这样预期的输出将如下所示:
z Date year
1 Date 1 2000-10-22 2000
2 Date 2 9/21/2001 2001
3 Date 3 2003 2003
4 Date 4 2007/2018 2017
5 Date 5 9/28/2010 2010
6 Date 6 9/27/2011 2011
7 Date 7 2007/2018 2019
8 Date 8 2017-10/2018-12 2017
9 Date 9 NA NA
10 Date 10
解决方案
使用 tidyr 的提取物。如果有两年,它将使用第一个。
library(dplyr)
library(tidyr)
df %>% extract(Date, "Year", "(\\d{4})", remove = FALSE, convert = TRUE)
给予:
z Date Year
1 Date 1 2000-10-22 2000
2 Date 2 9/21/2001 2001
3 Date 3 2003 2003
4 Date 4 2017/2018 2017
5 Date 5 9/28/2010 2010
6 Date 6 9/27/2011 2011
7 Date 7 2019/2020 2019
8 Date 8 2017-10/2018-12 2017
9 Date 9 NA NA
10 Date 10 NA
如果还需要第二年,那么:
df %>%
extract(Date, "Year2", "\\d{4}.*(\\d{4})", remove = FALSE, convert = TRUE) %>%
extract(Date, "Year", "(\\d{4})", remove = FALSE, convert = TRUE)
给予:
z Date Year Year2
1 Date 1 2000-10-22 2000 NA
2 Date 2 9/21/2001 2001 NA
3 Date 3 2003 2003 NA
4 Date 4 2017/2018 2017 2018
5 Date 5 9/28/2010 2010 NA
6 Date 6 9/27/2011 2011 NA
7 Date 7 2019/2020 2019 2020
8 Date 8 2017-10/2018-12 2017 2018
9 Date 9 NA NA NA
10 Date 10 NA NA
推荐阅读
- visual-studio-code - Ctrl+Shift+E 将特殊字符插入文件而不是在 VS Code 中显示资源管理器窗格
- javascript - Angular RxJS - 将 valueChanges 管道值设置为 null 直到可观察到解决
- django - NoReverseMatch 发生在任何异常中
- java - 当我使用访问令牌时,OAuth 请求不适用于语言 URL
- amazon-web-services - AWS Glue:爬虫将时间戳误解为字符串。将字符串转换为时间戳的 GLUE ETL 使它们为 NULL
- npm - 使用不匹配的 PostCSS 依赖项时出错
- java - Spring-WS 请求输入即将为空
- elasticsearch - Elasticsearch - 有条件的计数和求和桶
- spring - 在不使用基于文件的属性占位符的情况下设置动态 restConfiguration 端口
- java - 如何验证多个编辑文本?我正在使用 TextUtils 只能获取 1 个文本