R语言DataFrame按指定最新日期时间过滤报错求助
问题分析与解决
错误根源
- 重复列名引发转换失败:你定义的数据框里有两列都叫
c1,其中第二列是AK/AN这类非日期字符串。执行mutate(across(c1, mdy_hm))时,会强制把这列非日期文本转成日期格式,直接触发character string is not in a standard unambiguous format错误。 - 过滤时类型不匹配:直接用字符串和日期类型的列做比较,虽然lubridate有自动解析逻辑,但显式转换能彻底避免格式歧义问题。
修正后的代码
library(lubridate) library(dplyr) # 先修正列名,避免重复 df <- data.frame( date_col = c("1/12/2023 1:26", "1/16/2023 1:26", "1/11/2023 1:40", "1/18/2023 2:05", "1/24/2023 2:05", "1/25/2023 2:10"), region_col = c("AK","AN","DD","MA","DE","NY") ) # 仅对日期列做格式转换 df2 <- df %>% mutate(date_col = mdy_hm(date_col)) # 显式将过滤条件转为日期类型后再比较 df2 <- df2 %>% filter(date_col >= mdy_hm("1/24/2023 2:05"))
额外提示
- R允许重复列名,但会导致后续数据处理逻辑混乱,建议始终使用唯一列名;
- 日期处理时,显式调用格式转换函数(如
mdy_hm)比依赖自动解析更稳定,尤其面对非标准格式的日期字符串时。
内容的提问来源于stack exchange,提问作者potro
相关产品推荐
相关产品推荐

