按数据类型拆分R中的字符串
我有一个向量,像: “XY13DJ”“J114HD”“E63NP”“F161JU”“AM76NZ”“PMI79DU” 我需要分成两个向量,比如“XY J E F AM PMI”和“13DJ,114HD,63NP,161JU 76NZ,79DU” 在字符串中,每当第一个数字出现时,数据都应该被拆分 我写过这样的代码,但不起作用:按数据类型拆分R中的字符串,r,regex,R,Regex,我有一个向量,像: “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){ v
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)
在此处输入代码
向量_1=c()
向量_2=c()
string_split如果希望将其作为两列数据帧,请尝试此操作或省略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"
下面是另一个基本R解决方案,该解决方案基于正向前瞻和向后前瞻,由一个空元素拆分:
as.data.frame(do.call(rbind, strsplit(vec, "(?<=\\p{L})(?=\\d+\\p{L}+$)", perl = TRUE)))
结果:
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")
数据:
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")