R语言如何用separate、mutate拆分Tax.Rate为CGST等税率列
R语言拆分税率列实操方法
核心思路是针对每个税种单独做正则匹配提取,不受不同行税种组合、顺序不一致的影响,可直接运行以下代码测试:
首先加载依赖包:
library(tidyverse)
先构造和你示例一致的测试数据:
df <- tibble( Tax.Rate.... = c( "CGST 2.5% + SGST 2.5%", "CGST 6% + UTGST 6%", "IGST 12% " ) )
执行拆分操作:
df_result <- df %>% mutate( CGST = str_extract(Tax.Rate...., "(?<=CGST\\s)\\d+\\.?\\d*%"), SGST = str_extract(Tax.Rate...., "(?<=SGST\\s)\\d+\\.?\\d*%"), UTGST = str_extract(Tax.Rate...., "(?<=UTGST\\s)\\d+\\.?\\d*%"), IGST = str_extract(Tax.Rate...., "(?<=IGST\\s)\\d+\\.?\\d*%") )
运行后得到的df_result就包含你需要的4个税种独立列,当前行没有对应税种的位置会返回NA。
如果需要把税率转为可计算的数值型,可追加以下处理:
df_numeric <- df_result %>% # 去掉%符号,转为数值后除以100得到小数格式的税率 mutate(across(CGST:IGST, ~as.numeric(str_remove(.x, "%")) / 100))
之前用separate失败的原因
separate函数适合固定分隔符、列拆分顺序和数量固定的场景,你的数据中每行的税种组合、排列顺序都不固定,所以不适合用separate做硬拆分。
内容的提问来源于stack exchange,提问作者Harryc
相关产品推荐
相关产品推荐

