R语言如何从YYYYMMDDXX格式的周字段提取月份生成新列
方法1:直接字符串截取(效率最高)
因为week列的格式固定为YYYYMMDDXX,月份固定是整个字符串的第5-6位,直接转字符截取即可:
# 保留前导零,输出为字符类型(符合你要求的09、10格式) x$month <- substr(as.character(x$week), 5, 6) # 如果不需要前导零,要数值类型的月份,可再转数值 # x$month <- as.numeric(substr(as.character(x$week), 5, 6))
方法2:转日期格式后提取(适用性更广)
如果后续还要做日期相关的运算,建议先把前8位转成标准日期格式,再提取月份,容错性更高:
# 基础R实现,保留前导零 x$month <- format(as.Date(substr(as.character(x$week), 1, 8), format = "%Y%m%d"), "%m") # 如果你用lubridate包处理日期,写法更简洁 library(lubridate) # 输出数值型月份 x$month <- month(ymd(substr(as.character(x$week), 1, 8))) # 要保留前导零的话补格式化即可 x$month <- sprintf("%02d", month(ymd(substr(as.character(x$week), 1, 8))))
两种方法输出的结果都和你给出的预期输出完全一致。
内容的提问来源于stack exchange,提问作者Jane Miller
相关产品推荐
相关产品推荐

