R语言mutate与str_trunc处理年份字符串未得到预期输出问题
问题排查与解决方案
报错原因说明
NAs introduced by coercion报错:stringr::str_trunc()的side参数使用错误。side = "left"表示截断字符串左侧内容、保留右侧指定长度的字符,你使用的2018/19这类财年字符串长度为5,截断到4位后得到的是类似8/19的非纯数字内容,转换整数时就会生成NA。你需要保留左侧4位年份前缀,应该设置side = "right",代表截断右侧多余内容、保留左侧指定长度。- 单独运行代码提示对象未找到:
Start_year是数据框data的内置列,不是全局环境中独立存在的变量,单独运行代码时R无法在全局环境定位到对应对象,需要通过data$Start_year的形式调用数据框的列。
可行修复方案
方案1:修正str_trunc参数
select_data <- data %>% select(Product, Start_year, Number, Amount) %>% mutate( Avg_paid = Amount/Number, Start_year_short = as.integer(str_trunc(Start_year, 4, side = "right")) )
方案2:正则提取(兼容性更强)
通过正则匹配字符串开头的4位数字,不受财年分隔符、字符串长度异常影响,适配性更高:
library(stringr) select_data <- data %>% select(Product, Start_year, Number, Amount) %>% mutate( Avg_paid = Amount/Number, Start_year_short = as.integer(str_extract(Start_year, "^\\d{4}")) )
内容的提问来源于stack exchange,提问作者Pendragon
相关产品推荐
相关产品推荐

