1

ストリンガー/正規表現のみを使用できます。rで作業しています

ダウンロードした mpg2 という名前の csv があります。このサブセットには、メルセデス ベンツ製のみが含まれています。私がやろうとしているのは、モデルをアルファと数値に分割して、それらをプロットできるようにすることです。たとえば、メルセデス 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。簡単にスプリットできるように。

于 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"

出力を 2 列の行列として取得するには、次を使用します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 に答える