R如何将DataFrame中dd/mm/yyyy或dd/m/yyyy格式日期列拆分为日月年列
错误原因
原代码返回全NA是因为正则表达式和实际日期格式完全不匹配:
- 正则里写的分隔符是
,(逗号加空格),但目标日期是用/分隔的 - 最后一组的匹配规则
[^)]+是匹配非右括号的字符,目标日期里不存在右括号,没有任何一条数据能匹配规则,所以返回全NA
修正代码
有两种简单的实现方案,都可以得到目标结果:
方案1:调整extract函数的正则
把正则替换为匹配/分隔的规则,同时添加convert=TRUE参数自动将拆分后的内容转为数值类型:
library(dplyr) library(tidyr) df <- data.frame(Date = c("10/1/2001", "15/01/2010", "15/2/2010", "20/02/2010", "25/3/2010", "31/03/2010")) df %>% extract(Date, c("Day", "Month", "Year"), "([^/]+)/([^/]+)/(.+)", convert = TRUE)
方案2:使用separate函数拆分
因为是固定分隔符的拆分场景,用separate更简洁,直接指定分隔符为/即可:
df %>% separate(Date, into = c("Day", "Month", "Year"), sep = "/", convert = TRUE)
输出说明
你给出的预期输出里第一行Year为2010是笔误,原输入第一条数据为10/1/2001,运行代码后第一行Year会正确返回2001,其余数据和预期一致。
内容的提问来源于stack exchange,提问作者LeMarque
相关产品推荐
相关产品推荐

