如何从R中的字符串中获得最后n个字符? 有没有像SQL的RIGHT这样的函数?
当前回答
以防万一,如果需要选择一系列字符:
# For example, to get the date part from the string
substrRightRange <- function(x, m, n){substr(x, nchar(x)-m+1, nchar(x)-m+n)}
value <- "REGNDATE:20170526RN"
substrRightRange(value, 10, 8)
[1] "20170526"
其他回答
我不知道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"
更新:正如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个字符。
如果你不介意使用stringr包,str_sub很方便,因为你可以使用负号来向后计数:
x <- "some text in a string"
str_sub(x,-6,-1)
[1] "string"
或者,正如Max在对这个答案的评论中指出的那样,
str_sub(x, start= -6)
[1] "string"
substr的另一种替代方法是将字符串拆分为单个字符的列表并处理:
N <- 2
sapply(strsplit(x, ""), function(x, n) paste(tail(x, n), collapse = ""), 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!"
推荐文章
- 我应该如何从字符串中删除所有的前导空格?- - - - - -斯威夫特
- 使用该集合的原因。种子功能
- 将整数转换为字符串,以逗号表示千
- 将JavaScript字符串中的多个空格替换为单个空格
- 加快R中的循环操作
- printf()和puts()在C语言中的区别是什么?
- jQuery -替换字符串中某个字符的所有实例
- Base64长度计算?
- 使用split("|")按管道符号拆分Java字符串
- 错误:无法找到函数…在R
- Std::cin输入空格?
- 在编写自己的函数时,如何使用R的省略号特性?
- 当我的ggplot2语法合理时,我如何处理R CMD检查“全局变量无可见绑定”注释?
- 我如何在c++中创建一个随机的字母数字字符串?
- 如何使用JavaScript大写字符串中每个单词的第一个字母?