首页 > 解决方案 > 通过多个分隔符拆分列,保留分隔符

问题描述

如何使用 %、- 和 + 作为可能的分隔符将字符列拆分为 3 列,并将分隔符保留在新列中?

示例数据:

data <- data.table(x=c("92.1%+100-200","90.4%-1000+200", "92.8%-200+100", "99.2%-500-200","90.1%+500-200"))

示例所需数据:

data.desired <- data.table(x1=c("92.1%", "90.4%", "92.8%","99.2%","90.1%")
                           , x2=c("+100","-1000","-200","-500","+500")
                           , x3=c("-200","+200","+100","-200","-200"))

很高兴为一个好的答案和一些帮助奖励积分!

标签: rregexdata.tablestrsplit

解决方案


我们可以使用separatefromtidyr进行拆分,并使用正向前瞻来保留分隔符:

data %>% separate(x, c("x1", "x2", "x3"), sep = "(?=\\+|-)")
#       x1    x2   x3
# 1: 92.1%  +100 -200
# 2: 90.4% -1000 +200
# 3: 92.8%  -200 +100
# 4: 99.2%  -500 -200
# 5: 90.1%  +500 -200

也就是说,请注意,简单地拆分\\+|-我们会得到

data %>% separate(x, c("x1", "x2", "x3"), sep = "\\+|-")
#       x1   x2  x3
# 1: 92.1%  100 200
# 2: 90.4% 1000 200
# 3: 92.8%  200 100
# 4: 99.2%  500 200
# 5: 90.1%  500 200

在“无”处使用(?=\\+|-)split 以防万一我们有+or -(不匹配)。


推荐阅读