如何在R中基于数据框日期字段内容生成正确的month.name索引
解决方法
问题根源在于:当你直接用因子类型的Var1作为month.name的索引时,R会将因子转换为其底层的整数水平值(而非月份对应的实际序号)。由于你的Var1因子默认按字符串字母排序,对应的整数水平是1、2、3,因此调用month.name[1]「month.name[3]就得到了January、February、March。
以下两种可靠方法可以生成正确的MonthInd:
方法一:通过日期格式转换提取月份
先将Var1转换为日期格式,再提取月份序号匹配month.name:
# 把因子转为字符后,拼接日份转成日期 CNO_2020_Monthly$date_col <- as.Date(paste0(as.character(CNO_2020_Monthly$Var1), " 01"), format = "%b %Y %d") # 提取月份数字,匹配month.name得到完整月份名 CNO_2020_Monthly$MonthInd <- month.name[as.integer(format(CNO_2020_Monthly$date_col, "%m"))]
方法二:直接匹配月份缩写
提取Var1中的月份缩写,通过month.abb匹配到对应序号后再取month.name:
# 提取Var1的前3个字符(月份缩写) month_short <- substr(as.character(CNO_2020_Monthly$Var1), 1, 3) # 匹配系统内置的月份缩写向量month.abb,得到对应位置后取完整月份名 CNO_2020_Monthly$MonthInd <- month.name[match(month_short, month.abb)]
两种方法都能准确生成October、November、December,后续可直接用MonthInd与其他数据框合并。
内容的提问来源于stack exchange,提问作者Marcelo Bastos
相关产品推荐
相关产品推荐

