[英]Separating column using separate (tidyr) via dplyr on a first encountered digit
我正在嘗試將一個相當混亂的列分成兩列,其中包含句點和描述 。 我的數據類似於下面的摘錄:
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 (例如: 2 003 2 006) 。 我想要做的是歸結為:
我想這可能會這樣做。
library(tidyr)
separate(dta, indicator, c("indicator", "period"), "(?<=[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為您提供的正則表達式的說明。
(?<=[az])
是一個正面的背后 - 它斷言[az]
(匹配a和z之間范圍內的單個字符(區分大小寫))可以匹配 ?
在字面上匹配前面的空格字符,在零到一次之間,盡可能多次,根據需要返回 (?=[0-9])
是一個正向前瞻 - 它斷言[0-9]
(匹配0到9之間范圍內的單個字符)可以匹配
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.