3

Excelにはleftright、および と呼ばれる関数がありmid、セルからエントリの一部を抽出できます。たとえば、=left(A1, 3)は、セル A1 の左端から 3 文字を返し、セル A1=mid(A1, 3, 4)の 3 番目の文字から開始して、文字番号 3 ~ 6 を返します。R に同様の関数、またはこれを行うための同様の簡単な方法はありますか?

単純化されたサンプル問題として、ベクトルを取りたい

sample<-c("TRIBAL","TRISTO", "RHOSTO", "EUGFRI", "BYRRAT")

各エントリの最初の 3 文字、各エントリの中間の 2 文字、および各エントリの最後の 4 文字を含む 3 つの新しいベクトルを作成します。

Excel に機能がない (私が知っている) 少し複雑な質問は、各エントリの 1 番目、3 番目、5 番目の文字を使用して新しいベクトルを作成する方法です。

4

1 に答える 1

10

substr関数またはその近親者を探していますsubstring:

主な登場人物は単純明快です。

substr(sample, 1, 3)
[1] "TRI" "TRI" "RHO" "EUG" "BYR"

定義された位置でいくつかの文字を抽出することも同様です:

substr(sample, 2, 3)
[1] "RI" "RI" "HO" "UG" "YR"

末尾の文字を取得するには、次の 2 つのオプションがあります。

substr(sample, nchar(sample)-3, nchar(sample))
[1] "IBAL" "ISTO" "OSTO" "GFRI" "RRAT"

substring(sample, nchar(sample)-3)
[1] "IBAL" "ISTO" "OSTO" "GFRI" "RRAT"

そして、最後の「複雑な」質問:

characters <- function(x, pos){
  sapply(x, function(x)
    paste(sapply(pos, function(i)substr(x, i, i)), collapse=""))
}
characters(sample, c(1,3,5))
TRIBAL TRISTO RHOSTO EUGFRI BYRRAT 
 "TIA"  "TIT"  "ROT"  "EGR"  "BRA" 
于 2012-08-19T18:35:01.567 に答える