R语言如何生成带N前缀的年份后两位+两位haul编码?
问题修正方案
你的代码主要有三个问题:变量名误用、未添加前缀N,以及补零逻辑可以更简洁。以下是两种可行的修改方式:
方法一:使用Base R的sprintf(推荐,代码更简洁)
sprintf可以直接格式化字符串,一次性完成前缀、年份截取、补零和拼接:
# 修正变量名,同时完成格式拼接 stck$cod_lance <- as.factor(sprintf("N%02d_%02d", substr(stck$year, 3, 4), stck$haul))
substr(stck$year, 3, 4)提取年份的后两位(1983会得到"83")%02d表示将数字格式化为两位,不足时前面补零(比如haul=1会变成"01",haul=11保持"11")- 整体拼接成
NXX_XX的目标格式
方法二:使用stringr包(更直观的字符串操作)
如果你习惯用stringr的函数,可以这样写:
library(stringr) stck$cod_lance <- as.factor( str_c("N", str_sub(stck$year, 3, 4), "_", str_pad(stck$haul, width = 2, pad = "0")) )
str_sub(stck$year, 3, 4)提取年份后两位str_pad(stck$haul, 2, pad = "0")将haul补为两位数字str_c把所有部分拼接成目标编码
原代码的问题说明
- 变量名错误:你代码里的
lance对应数据框的haul,fecha对应year,需要替换正确 - 缺少前缀
N:原代码没有在拼接结果前添加这个固定前缀 - 补零逻辑冗余:用
ifelse判断补零不如格式化函数通用,格式化函数能统一处理所有数字的补零需求
内容的提问来源于stack exchange,提问作者Juan Carlos
相关产品推荐
相关产品推荐

