我试图将一列相当混乱的数据分成包含时间段和描述两列。我的数据类似于以下示例:
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*"
也无法正常工作,因为有时候出现了太多的2 (例如:20032006)。
我的目标是:
- 识别字符串中的第一个数字
- 在该字符上进行分割。实际上,如果能保留该特定字符,我会很高兴。