web-dev-qa-db-ja.com

Rの特定の文字から文字列を切り捨てます

私はRの文字列のリストを持っています:

WDN.TO
WDR.N
WDS.AX
WEC.AX
WEC.N
WED.TO

文字「。」で始まるすべての文字列の接尾辞を取得したいのですが、結果は次のようになります。

.TO
.N
.AX
.AX
.N
.TO

誰かアイデアはありますか?

19
user802231

ジョシュアの解決策はうまくいきます。 subの代わりにgsubを使用します。 gsubは、文字列内のパターンの複数の出現を置換するためのものです-subは、1つの出現のためのものです。パターンも少し単純化できます:

> x <- c("WDN.TO","WDR.N","WDS.AX","WEC.AX","WEC.N","WED.TO")
> sub("^[^.]*", "", x)
[1] ".TO" ".N"  ".AX" ".AX" ".N"  ".TO"

...しかし、文字列が質問のように規則的である場合は、最初の3文字を削除するだけで十分です。

> x <- c("WDN.TO","WDR.N","WDS.AX","WEC.AX","WEC.N","WED.TO")
> substring(x, 4)
[1] ".TO" ".N"  ".AX" ".AX" ".N"  ".TO"
19
Tommy

gsubの使用:

x <- c("WDN.TO","WDS.N")
# replace everything from the start of the string to the "." with "."
gsub("^.*\\.",".",x)
# [1] ".TO" ".N" 

strsplitの使用:

# strsplit returns a list; use sapply to get the 2nd obs of each list element
y <- sapply(strsplit(x,"\\."), `[`, 2)
# since we split on ".", we need to put it back
paste(".",y,sep="")
# [1] ".TO" ".N"
13
Joshua Ulrich

Strsplitはそれを行うかもしれませんが、データセットが大きすぎる場合は、範囲外のエラー添え字を表示します

x <- c("WDN.TO","WDR.N","WDS.AX","WEC.AX","WEC.N","WED.TO")
y <- strsplit(x,".")[,2]
#output y= TO N AX AX N TO
0
Aayush Agrawal