web-dev-qa-db-ja.com

Rベクトルのすべての要素から最後のn文字を削除する方法

私はRが初めてで、ベクトル(配列?)のすべての要素から最後のn文字を削除する方法の簡単な例がオンラインで見つかりませんでした。

私はJavaのバックグラウンドから来ているので、やりたいのはa$dataのすべての要素を反復処理し、すべての要素から最後の3文字を削除することです。

どうしますか?

79
LucasSeveryn

これが私がすることの例です。あなたが探しているものであることを願っています。

char_array = c("foo_bar","bar_foo","Apple","beer")
a = data.frame("data"=char_array,"data2"=1:4)
a$data = substr(a$data,1,nchar(a$data)-3)

aには次が含まれます。

  data data2
1 foo_ 1
2 bar_ 2
3   ap 3
4    b 4
87
nfmcclure

gsubを使用する方法を次に示します。

cs <- c("foo_bar","bar_foo","Apple","beer")
gsub('.{3}$', '', cs)
# [1] "foo_" "bar_" "ap"   "b"
70
Matthew Plourde

これは@nfmcclureの回答とほぼ同じですが、名前がベースRの名前よりも一貫性と記述性に優れた関数のセットを提供するため、stringrパッケージを使用することを好みます(実際、私は常に"how R "=の文字数を取得するには、名前nchar())を思い出せないためです。

library(stringr)
str_sub(iris$Species, 1, str_length(iris$Species)-3)

これにより、Species列の各値から最後の3文字が削除されます。

21
Blaszard

stringi パッケージでも同じことが実現できます。

library('stringi')
char_array <- c("foo_bar","bar_foo","Apple","beer")
a <- data.frame("data"=char_array, "data2"=1:4)
(a$data <- stri_sub(a$data, 1, -4)) # from the first to the last but 4th char
## [1] "foo_" "bar_" "ap"   "b" 
13
gagolews