1

我只能使用 stringer/正则表达式,我在 r 工作

我下载了一个名为 mpg2 的 csv,其中的一个子集仅包含 Mercedes Benz 制造的。我想要做的是将模型拆分为字母和数字,以便我可以绘制它们。例如,梅赛德斯 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))

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

但我需要将“XYZ123”基本上拆分为字母和数字部分,并将它们放在 2 个单独的列中。

4

2 回答 2

2

像这样的东西:

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

我已将原版替换group of numbers,group of numbers. 这样我就可以轻松地对 ot 进行拆分。

于 2014-04-14T04:29:17.913 回答
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。

于 2014-04-14T04:34:49.487 回答