正则表达式 – 使用单独的(tidyr)通过dplyr在第一个遇到的数字上
发布时间:2020-12-13 22:56:32 所属栏目:百科 来源:网络整理
导读:我试图将一个相当混乱的列分成两列,包含句点和描述.我的数据类似于以下摘录: set.seed(1)dta - data.frame(indicator=c("someindicator2001","someindicator2011","some text 20022008","another indicator 2003"),values = runif(n = 4)) 期望的结果 期望
我试图将一个相当混乱的列分成两列,包含句点和描述.我的数据类似于以下摘录:
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:]]”,但是它将列分解成太多列,因为它似乎与所有可用的数字匹配. 我要做的是归结为: >识别字符串中的第一个数字
我认为这可能会这样做.
library(tidyr) separate(dta,indicator,c("indicator","(?<=[a-z]) ?(?=[0-9])") # 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 以下是regex101给您的正则表达式的解释. (α<= [a-z])是正的lookbehind - 它断言[a-z](匹配a和z(区分大小写)之间的范围内存在的单个字符)可以匹配>?匹配前面的空格字符,在零和一次之间,尽可能多的次数,根据需要回复>(?= [0-9])是一个积极的前瞻 – 它断言[0-9](匹配在0和9之间的范围内存在的单个字符)可以匹配 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |