r - 通过多个分隔符拆分列,保留分隔符
问题描述
如何使用 %、- 和 + 作为可能的分隔符将字符列拆分为 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"))
很高兴为一个好的答案和一些帮助奖励积分!
解决方案
我们可以使用separate
fromtidyr
进行拆分,并使用正向前瞻来保留分隔符:
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 -
(不匹配)。
推荐阅读
- sql - 为一个字符串选择多列(按日期)
- python - python popen Thread对象将stdout读取到变量
- angular - PrimeNG 单选按钮以编辑形式 ANGULAR 5
- java - AADSTS70002:验证凭据时出错。AADSTS50012:客户端断言不在其有效时间范围内
- algorithm - 在图中找到任意大权重的路径
- docker - 在不中断当前执行的情况下升级微服务
- c# - 如何使用两个连接表 a 和 B 的列表编写 linq 查询,然后按 a 的 id 分组,以及 B 中的连接行数
- python - 根据不同的数组对随机生成的 Numpy 数组进行排序
- python - python和firebase之间的连接未建立
- webpack - 使用 SplitChunksPlugin 基于 Webpack 4 中的模块创建块