【发布时间】:2016-04-22 21:41:41
【问题描述】:
我试图将一个相当混乱的列分成两列,分别包含 句号 和 description。我的数据类似于下面的摘录:
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)。
我想要做的归结为:
- 识别字符串中的第一个数字
- 根据该章程分开。 事实上,我也很乐意保留这个特殊的角色。
【问题讨论】:
标签: regex r string dplyr tidyr