我有一个向量字符串:
str.vect<-c ("abcR.1", "abcL.1", "abcR.2", "abcL.2")
str.vect
[1] "abcR.1" "abcL.1" "abcR.2" "abcL.2"
如何在每个向量元素的右边删除第三个字符?
这是期望的结果:
"abc.1" "abc.1" "abc.2" "abc.2"
提前非常感谢你
您可以nchar
用来查找向量中每个元素的长度
> nchar(str.vect)
[1] 6 6 6 6
然后将其与组合在一起strtrim
以获取每个字符串的开头
> strtrim(str.vect, nchar(str.vect)-3)
[1] "abc" "abc" "abc" "abc"
为了获得单词的结尾,您可以使用它substr
(实际上,您也可以使用substr来获得开头...)
> substr(str.vect, nchar(str.vect)-1, nchar(str.vect))
[1] ".1" ".1" ".2" ".2"
最后,您使用paste0
(paste
带有sep=""
)将它们粘在一起
> paste0(strtrim(str.vect, nchar(str.vect)-3), # Beginning
substr(str.vect, nchar(str.vect)-1, nchar(str.vect))) # End
[1] "abc.1" "abc.1" "abc.2" "abc.2"
如果您知道自己的琴弦具有某些特殊特征,则可以使用更简单的方法
例如,如果长度始终为6,则可以直接将nchar
呼叫替换为适当的值。
编辑:或者,R还支持正则表达式,这使此任务更加容易。
> gsub(".(..)$", "\\1", str.vect)
[1] "abc.1" "abc.1" "abc.2" "abc.2"
语法有点晦涩难懂,但是一旦知道了要看的内容就没有那么困难了。
第一个参数(".(..)$"
)是您要匹配的参数
.
匹配任何字符,$
表示字符串的结尾。因此...$
指示字符串中的最后3个字符。
我们将最后两个放在括号中,以便将它们存储在内存中。
第二个参数告诉我们您要替换匹配的子字符串的内容。在我们的案例中,我们将\\1
其表示为“无论在第一对括号中是什么”。
因此,该命令的本质含义是:“在字符串中查找最后三个字符,并用最后两个字符进行更改”。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句