如何从R中的字符串中获取最后n个字符? 是否有像SQL的RIGHT这样的函数?从R中的字符串中提取最后n个字符
回答
我不知道在基础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"
如果你不介意使用stringr
包,str_sub
很方便,因为你可以使用底片向后计数:
x <- "some text in a string"
str_sub(x,-6,-1)
[1] "string"
或者像Max在这个答案评论指出,
str_sub(x, start= -6)
[1] "string"
另外,str_sub(x,start = -n)获取n个最后的字符。 – Max
stringr不适用于NA的值和所有编码。我强烈推荐stringi包:) – bartektartanus
我相信'stringr'已经使用'stringi'作为后端重制,所以现在应该与NAs等一起工作。 –
到substr
的替代方法是将字符串分割成单个字符和处理的列表:
N <- 2
sapply(strsplit(x, ""), function(x, n) paste(tail(x, n), collapse = ""), N)
我感觉系统。时间()战斗酿造:-) –
str = 'This is an example'
n = 7
result = substr(str,(nchar(str)+1)-n,nchar(str))
print(result)
> [1] "example"
>
这是最好的答案,不涉及任何软件包的使用 – prab4th
使用stri_sub
函数从stringi
包。 要从末尾获取子字符串,请使用负数。 看看下面的例子:
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")
安装该软件包。
另一种相当简单的方法是使用正则表达式和sub
:
sub('.*(?=.$)', '', string, perl=T)
所以,“摆脱一切之后的一个字符的”。为了抢关底更多的字符,在先行断言加然而,许多点:
sub('.*(?=.{2}$)', '', string, perl=T)
其中.{2}
意味着..
,或者“任何两个字符”,所以意思是“摆脱一切跟着两个字符”。
sub('.*(?=.{3}$)', '', string, perl=T)
三个字符等您可以设置字符变量抢的数目,但你必须paste
变量值进入正则表达式字符串:
n = 3
sub(paste('.+(?=.{', n, '})', sep=''), '', string, perl=T)
为了避免所有的预见等,你可以做'regmatches(x,regexpr(“。{6} $ “,x))' – thelatemail
我也使用substr
,但方式不同。我想提取“给我你的食物”的最后6个字符。下面是步骤:
(1)拆分字符
splits <- strsplit("Give me your food.", split = "")
(2)提取的最后6个字符
tail(splits[[1]], n=6)
输出:
[1] " " "f" "o" "o" "d" "."
每个字符的可通过splits[[1]][x]
访问,其中x为1到6.
上@Andrie解决方案稍加修改也给出了补充:
substrR <- function(x, n) {
if(n > 0) substr(x, (nchar(x)-n+1), nchar(x)) else substr(x, 1, (nchar(x)+n))
}
x <- "moSvmC20F.5.rda"
substrR(x,-4)
[1] "moSvmC20F.5"
这就是我一直在寻找。并邀请到左侧:
substrL <- function(x, n){
if(n > 0) substr(x, 1, n) else substr(x, -n+1, nchar(x))
}
substrL(substrR(x,-4),-2)
[1] "SvmC20F.5"
有人之前使用了类似的解决方案,我的,但我觉得它更容易如下思考:
> 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))
根据需要这将使最后一个字符。
我使用下面的代码来获取字符串的最后一个字符。
substr(output, nchar(stringOfInterest), nchar(stringOfInterest))
你可以玩nchar(stringOfInterest)来弄清楚如何得到最后几个字符。
使用substring()
函数的简单基础R解决方案(谁知道这个功能甚至存在?):
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!"
- 1. 从python中的字符串中提取最后一个字符?
- 2. 如何从字符串中删除最后的n个字符?
- 3. R - 从字符串中提取数字
- 4. R:从字符串中提取数字
- 5. Ruby,从字符串中删除最后N个字符?
- 6. 如何提取R中字符串的最后4位数字
- 7. 提取字符串中的最后一个单词R
- 8. 从字符串中提取R中
- 9. 在Excel中提取字符串的最后一个字符
- 10. 提取从字符串中的R
- 11. 从bourne shell中的字符串中提取n个字
- 12. 在字符'?'之后从字符串中获取最后一个字符串
- 13. 从字符串获取n个字符
- 14. 从字符串中提取括号内的最后一个字符串 - python
- 15. 撷取在KSH字符串的最后n个字符
- 16. 从字符串中提取字符串
- 17. 截断字符串中的最后n个字符使用.format()
- 18. 从变量中获取字符串的最后一个字符
- 19. 从字符串前移至n个字符到最后
- 20. 从Ruby中的一个长字符串中提取字符串
- 21. 如何从SQL中的字符串中提取某些第n个字符
- 22. 字符串:提取最后六个字符后的最后一个/
- 23. 从我的字符串中提取最后两个单词
- 24. 从字符串中提取一个字
- 25. 从字符串中提取2个字
- 26. 从字符串中提取字符
- 27. 从字符串中提取字符
- 28. 获取字符串中的最后一个子字符串?
- 29. 从字符串中提取
- 30. 从字符串中提取
并观看了来港... – hadley
使用stringi包。它适用于NAs和所有编码:) – bartektartanus
避免通过将'nchar(x)'分配给局部变量两次更有效吗? –