我有一个像这样的矢量: " XY13DJ" " J114HD" " E63NP" " F161JU" " AM76NZ" " PMI79DU"
我需要分成两个向量,例如" XY J E F AM PMI"和" 13DJ,114HD,63NP,161JU 76NZ,79DU"。
在字符串中,每当第一个数字到来时,数据应该被分割。
我编写了这样的代码无效:
enter code here
vector_1 = c()
vector_2 = c()
string_split <- function(ele){
val <- regexpr('[0-9]',ele)[1]
fn <- substr(ele,0,val-1)
ln <- substr(ele,val,nchar(ele))
vector_1 <- append(vector_1,fn)
vector_2 <- append(vector_2,ln)
}
sapply(vector-to-pass, string_split)
答案 0 :(得分:4)
如果您希望将其作为两列数据框,请尝试此操作或省略as.list
:
as.list(read.table(text = sub("(\\d)", " \\1", x), as.is = TRUE))
,并提供:
$V1
[1] "XY" "J" "E" "F" "AM" "PMI"
$V2
[1] "13DJ" "114HD" "63NP" "161JU" "76NZ" "79DU"
答案 1 :(得分:0)
这是另一个基础R解决方案,它基于积极的前瞻和外观来分裂一个空元素:
as.data.frame(do.call(rbind, strsplit(vec, "(?<=\\p{L})(?=\\d+\\p{L}+$)", perl = TRUE)))
或者您也可以使用str_match
中的stringr
来匹配捕获组:
library(stringr)
as.data.frame(str_match(vec, "(^\\p{L}+)(\\d+\\p{L}+$)")[,-1])
<强>结果:强>
V1 V2
1 XY 13DJ
2 J 114HD
3 E 63NP
4 F 161JU
5 AM 76NZ
6 PMI 79DU
数据:强>
vec = c("XY13DJ", "J114HD", "E63NP", "F161JU", "AM76NZ", "PMI79DU")