如何从R中的字符串中获得最后n个字符? 有没有像SQL的RIGHT这样的函数?
当前回答
使用stringi包中的stri_sub函数。 要从末尾获得子字符串,请使用负数。 请看下面的例子:
stri_sub("abcde",1,3)
[1] "abc"
stri_sub("abcde",1,1)
[1] "a"
stri_sub("abcde",-3,-1)
[1] "cde"
你可以从github: https://github.com/Rexamine/stringi安装这个包
它是可在CRAN现在,简单的类型
install.packages("stringi")
安装此包。
其他回答
之前有人使用了类似的解决方案,但我发现下面的想法更容易:
> text<-"some text in a string" # we want to have only the last word "string" with 6 letter
> n<-5 #as the last character will be counted with nchar(), here we discount 1
> substr(x=text,start=nchar(text)-n,stop=nchar(text))
这将产生所需的最后一个字符。
更新:正如mdsumner所指出的,原始代码已经向量化了,因为substr是。我应该更小心的。
如果你想要一个矢量化的版本(基于Andrie的代码)
substrRight <- function(x, n){
sapply(x, function(xx)
substr(xx, (nchar(xx)-n+1), nchar(xx))
)
}
> substrRight(c("12345","ABCDE"),2)
12345 ABCDE
"45" "DE"
注意,我已经将(nchar(x)-n)更改为(nchar(x)-n+1)以获得n个字符。
一个简单的基于R的解决方案,使用substring()函数(谁知道这个函数甚至存在?)
RIGHT = function(x,n){
substring(x,nchar(x)-n+1)
}
这基本上利用了substr()在下面的优势,但其默认结束值为1,000,000。
例子:
> RIGHT('Hello World!',2)
[1] "d!"
> RIGHT('Hello World!',8)
[1] "o World!"
我不知道base R中的任何东西,但它是直接使用substr和nchar创建一个函数来做到这一点:
x <- "some text in a string"
substrRight <- function(x, n){
substr(x, nchar(x)-n+1, nchar(x))
}
substrRight(x, 6)
[1] "string"
substrRight(x, 8)
[1] "a string"
正如@mdsumner指出的那样,这是向量化的。考虑:
x <- c("some text in a string", "I really need to learn how to count")
substrRight(x, 6)
[1] "string" " count"
str = 'This is an example'
n = 7
result = substr(str,(nchar(str)+1)-n,nchar(str))
print(result)
> [1] "example"
>
推荐文章
- 我如何检查如果一个变量是JavaScript字符串?
- 如何显示有两个小数点后的浮点数?
- 在Lua中拆分字符串?
- 如何在Python中按字母顺序排序字符串中的字母
- 如何将颜色分配给ggplot2中具有稳定映射的类别变量?
- 在基础图形的绘图区域之外绘制一个图例?
- python: SyntaxError: EOL扫描字符串文字
- PHP子字符串提取。获取第一个'/'之前的字符串或整个字符串
- 去测试字符串包含子字符串
- 在ggplot2中的各个facet上注释文本
- 双引号vs单引号
- 如何知道一个字符串开始/结束在jQuery特定的字符串?
- 在Swift中根据字符串计算UILabel的大小
- 确定数据帧列的数据类型
- 创建一个可变长度的字符串,用重复字符填充