如何将字符型日期拆分为可索引列表以提取月份?
字符型日期提取月份并归类的解决办法
为啥你取a[2]会得到NULL
你用strsplit得到的是列表对象,这个列表里只有1个元素——就是拆分出来的["1959", "10", "05"]向量。a[2]是取列表的第2个元素,但列表本身只有1个元素,自然返回NULL。要拿到月份,得先定位到列表里的向量,再取第2个值,也就是写a[[1]][2]。
更靠谱的处理方式(不推荐硬拆字符串)
直接用日期处理工具比手动拆分字符串稳妥得多,能避免各种日期格式的坑:
用Base R原生函数搞定
先把字符转成标准日期,再提取月份:
# 把字符列转成日期格式 official$date <- as.Date(official$date) # 提取数字格式的月份(比如"10") official$month <- format(official$date, "%m") # 要是想要月份名称(比如"十月"或"October",取决于系统语言) official$month_name <- format(official$date, "%B") # 按月份归类数据框 month_groups <- split(official, official$month)
用lubridate包更简洁
lubridate专门处理日期时间,代码更直观:
library(lubridate) # 自动识别日期格式并提取月份(返回数字1-12) official$month <- month(ymd(official$date)) # 按月份分组或拆分 # 分组(适合后续统计) grouped_data <- dplyr::group_by(official, month) # 拆分成按月份命名的列表 month_list <- split(official, official$month)
要是非要用strsplit的修正写法
如果坚持用字符串拆分,批量处理可以这么写:
# 给数据框加月份列 official$month <- sapply(official$date, function(x) { strsplit(x, split = "-")[[1]][2] })
内容的提问来源于stack exchange,提问作者Johnny
相关产品推荐
相关产品推荐

