正则表达式:Split String,

时间:2017-04-24 10:17:26

标签: r regex tidyr

真正的基本问题,但我有一个包含多行脏数据的列,我一直在寻找使用正则表达式来清理它,尽管不可否认,这可能不是最好的方法。

  • 所有代码由四位数组成,所有数量均由一到三位数组成。
  • 所有单元格包含至少一个由四位数组成的代码。 (1234)
    • 某些单元格包含多个代码。 (4321 9876)
    • 某些单元格包含代码和数量,由单个空格分隔,可以是前导和尾随。 (12 1234)(1234 12)
    • 某些细胞含有上述所有细胞的组合(1234 12 9876 1234 12)
    • 有些单元格包含所有三个单元格的组合,加上一些随机数字,无法剥离。 (1234 12 9876 1234 12 1)

我希望拆分这些字符串,并将它们分为两列:Quantity,Code。

library(tiydyr)
library(dplyr)
df <- data.frame(string = c("1234" , "4321 9876", "199 1234 5678 12", 
                                                  "1234 12 9876 1234 12 1"))

df <- extract(df, string, c("Quantity","Code"), "(\\d{1,3})(\\d{4})" )

我收到以下错误:

  

错误:列规范无效

正如评论中所指出的,我要做的事情需要多个正则表达式。如果有人可以指出我正确的方向,如何分割一个,如[数量,代码],这将是非常有帮助的。

+-------------------------------+
|Row  Dirty String              |
+-------------------------------+
| 1  1234                       |
| 2  4321 9876                  |
| 3  199 1234 5678 12           |
| 4  1234 12 9876 1234 12 1     |
+-------------------------------+

(理想)

+---------------------------+
| Row Quantity  Code        |
+---------------------------+
| 1     1       1234        |
| 2     1       4321        |
| 3     1       9876        |
| 4    199      1234        |
| 5     12      5678        |
| 6     1       1234        |
| 7     12      9876        |
| 8     12      1234        |
+---------------------------+ 

0 个答案:

没有答案