如何从R向量中的每个元素中删除最后n个字符

我对R非常陌生,我在网上看了一遍,也找不到一个简单的例子来说明如何从一个向量的每个元素(数组?)中删除最后n个字符。

我来自Java背景,所以我想要做的是遍历a$data每个元素,并从每个元素中删除最后3个字符。

你将如何去呢?

这是我会做的一个例子。 我希望这是你在找什么。

 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) 

现在应该包含:

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

这里有一个与gsub的方式:

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

使用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" 

虽然这与@nfmcclure的答案基本相同,但我更喜欢使用stringr包,因为它提供了一组函数,其名称与基本R中的名称相比是最一致和描述性的(实际上,我总是对“如何获取数字R中的字符“,因为我不记得名字nchar() )。

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

这将删除Species列中每个值的最后3个字符。