我只能使用纵梁/正则表达式,我在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和数字部分,并将它们放在两个单独的列中。
答案 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。