stringr按字母和数字拆分列

时间:2014-04-14 04:23:12

标签: regex r stringr

我只能使用纵梁/正则表达式,我在r

工作

我有一个我下载的名为mpg2的csv,其中一部分只包含梅赛德斯奔驰。我想要做的是将模型分成alpha和数字,以便我可以绘制它们。例如,梅赛德斯C300需要分为C和300,或GLS500分为GLS和550.

所以现在我拥有所有型号,现在我想在字母和数字之间进行分割。

我试过了

mercedes<- subset(mpg2, make=="Mercedes-Benz")
str_split(mercedes$model, "[0:9]") 

但是这并没有做我想要的事情而且我玩过n =并且它也不起作用。 那我有

MB$modelnumber<-as.numeric(gsub("([0-9]+).*$", "\\1", mercedes$model))

这使得一列只有数字,我无法让这些字母起作用。 如果我需要上传我的特定数据集让我知道,我只需要弄清楚如何做到这一点。

但我需要基本上拆分&#34; XYZ123&#34;进入其alpha和数字部分,并将它们放在两个单独的列中。

2 个答案:

答案 0 :(得分:2)

类似的东西:

x <- "XYZ123"
x <- gsub("([0-9]+)",",\\1",x)
strsplit(x,",")

我已将原来的group of numbers替换为,group of numbers。所以我可以很容易地分开。

答案 1 :(得分:0)

您可以使用以下内容:

SplitMe <- function(string, alphaFirst = TRUE) {
  Pattern <- ifelse(isTRUE(alphaFirst), "(?<=[a-zA-Z])(?=[0-9])", "(?<=[0-9])(?=[a-zA-Z])")
  strsplit(string, split = Pattern, perl = T)
}

String <- c("C300", "GLS500", "XYZ123")
SplitMe(String)
# [[1]]
# [1] "C"   "300"
# 
# [[2]]
# [1] "GLS" "500"
# 
# [[3]]
# [1] "XYZ" "123"

要将输出作为两列矩阵,只需使用do.call(rbind, ...)

do.call(rbind, SplitMe(String))
#      [,1]  [,2] 
# [1,] "C"   "300"
# [2,] "GLS" "500"
# [3,] "XYZ" "123"

以上只是我为以下场景保存的便利功能:

strsplit(String, split = "(?<=[a-zA-Z])(?=[0-9])", perl = T)

strsplit(String, split = "(?<=[0-9])(?=[a-zA-Z])", perl = T)

此功能不会将GLS500更改为GLS550。