如何从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个字符。