我试图将一个相当混乱的列分成两列包含 期 和 描述。我的数据类似于下面的摘录:
set.seed(1)
dta <- data.frame(indicator=c("someindicator2001", "someindicator2011",
"some text 20022008", "another indicator 2003"),
values = runif(n = 4))
期望的结果
期望的结果应该如下:
indicator period values
1 someindicator 2001 0.2655087
2 someindicator 2011 0.3721239
3 some text 20022008 0.5728534
4 another indicator 2003 0.9082078
特点
- 指标描述在一列中
- 数值(从第一个数字开始计算) 同 第一个数字在第二列)
码
require(dplyr); require(tidyr); require(magrittr)
dta %<>%
separate(col = indicator, into = c("indicator", "period"),
sep = "^[^\\d]*(2+)", remove = TRUE)
当然这不起作用:
> head(dta, 2)
indicator period values
1 001 0.2655087
2 011 0.3721239
其他尝试
- 我也尝试过默认的分离方法
sep = "[^[:alnum:]]"
但它将列拆分为太多列,因为它似乎匹配所有可用的数字。 - 该
sep = "2*"
也不起作用,因为有时太多2s (例: 20032006)。
我想要做的是归结为:
- 识别字符串中的第一个数字
- 在该章程上分开。 事实上,我也很乐意保留这个特殊的角色。