我是R的新手,我在网上找不到一个简单的例子,说明如何从向量的每个元素中删除最后n个字符(数组?)
我来自Java背景,所以我想做的是迭代每个元素a$data
并从每个元素中删除最后3个字符.
你会怎么做?
nfm*_*ure 104
这是我要做的一个例子.我希望这就是你要找的东西.
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)
Run Code Online (Sandbox Code Playgroud)
a现在应该包含:
data data2
1 foo_ 1
2 bar_ 2
3 ap 3
4 b 4
Run Code Online (Sandbox Code Playgroud)
Mat*_*rde 76
这是一种方式gsub
:
cs <- c("foo_bar","bar_foo","apple","beer")
gsub('.{3}$', '', cs)
# [1] "foo_" "bar_" "ap" "b"
Run Code Online (Sandbox Code Playgroud)
Bla*_*ard 22
尽管这与@nfmcclure的答案大致相同,但我更喜欢使用stringr
包,因为它提供了一组函数,这些函数的名称与基本R中的名称最一致和描述性(实际上我总是谷歌"如何获取数量R中的字符"因为我记不起名字了" nchar()
.
library(stringr)
str_sub(iris$Species, end=-4)
#or
str_sub(iris$Species, 1, str_length(iris$Species)-3)
Run Code Online (Sandbox Code Playgroud)
这将从Species
列中的每个值中删除最后3个字符.
gag*_*ews 13
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"
Run Code Online (Sandbox Code Playgroud)
类似于 @Matthew_Plourde 使用gsub
但是,如果原始字符串短于要剪切的字符数,则使用将修剪到零个字符的模式,即返回“” :
cs <- c("foo_bar","bar_foo","apple","beer","so","a")
gsub('.{0,3}$', '', cs)
# [1] "foo_" "bar_" "ap" "b" "" ""
Run Code Online (Sandbox Code Playgroud)
区别在于,{0,3}
量词表示 0 到 3 个匹配,而{3}
需要恰好 3 个匹配,否则找不到匹配,在这种情况下gsub
返回原始的、未修改的字符串。
NB 使用{,3}
相当于{0,3}
,我只是更喜欢后者。
有关正则表达式量词的更多信息,请参阅此处: https: //www.regular-expressions.info/refrepeat.html