在R语言中将CSV数据的字符串月份转换为数值的方法
将字符串类型的月份转换为数值类型(R语言)
刚好碰到过类似的需求,给你几个实用的方法来解决这个问题:
方法1:用R内置的month.name处理完整月份名称
因为你提到的是完整的月份字符串(比如September),R内置了一个按1-12月顺序排列的完整月份名称向量month.name,直接用match()就能快速映射到对应的数值:
# 假设你的数据框是df,Month列是完整英文月份 df$Month_num <- match(df$Month, month.name)
如果你的Month列存在大小写不统一的情况(比如有的是september,有的是September),可以用stringr包的str_to_title()先统一格式:
library(stringr) df$Month_num <- match(str_to_title(df$Month), month.name)
方法2:用lubridate包灵活处理(推荐)
如果你已经在使用tidyverse(毕竟你用了read_csv()),lubridate包处理日期相关的转换会更灵活,不管是完整月份还是缩写都能自动识别:
library(lubridate) # 方式1:拼接成完整日期后提取月份数值 df$Month_num <- month(dmy(paste("1", df$Month, "2020")), label = FALSE) # 方式2:直接解析月份字符串 df$Month_num <- parse_date_time(df$Month, orders = "m") %>% month()
补充:针对月份缩写的情况
如果你的Month列是缩写形式(比如Sep),就用R内置的month.abb向量,和你给出的代码逻辑一致:
month_abbr <- c('Sep', 'Oct', 'Nov', 'Dec', 'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug') match(month_abbr, month.abb) # 输出结果:[1] 9 10 11 12 1 2 3 4 5 6 7 8
内容的提问来源于stack exchange,提问作者ah bon
相关产品推荐
相关产品推荐

