如何从R中的字符串中获得最后n个字符? 有没有像SQL的RIGHT这样的函数?
当前回答
更新:正如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个字符。
其他回答
以防万一,如果需要选择一系列字符:
# 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"
我使用下面的代码来获取字符串的最后一个字符。
substr(output, nchar(stringOfInterest), nchar(stringOfInterest))
您可以使用nchar(stringOfInterest)来计算如何获取最后几个字符。
我也使用substr,但方式不同。我想提取“给我你的食物”的最后6个字符。以下是步骤:
(1)拆分字符
splits <- strsplit("Give me your food.", split = "")
(2)提取最后6个字符
tail(splits[[1]], n=6)
输出:
[1] " " "f" "o" "o" "d" "."
每个字符都可以通过分割[[1]][x]访问,其中x是1到6。
对于那些来自Microsoft Excel或谷歌Sheets的人来说,你应该见过LEFT(), RIGHT()和MID()这样的函数。我已经创建了一个名为forstringr的包,其开发版本目前在Github上。
if(!require("devtools")){
install.packages("devtools")
}
devtools::install_github("gbganalyst/forstringr")
library(forstringr)
str_left():从左边开始计数,然后提取n个字符 str_right()-从右边开始计数,然后提取n个字符 str_mid()-从中间提取字符
例子:
x <- "some text in a string"
str_left(x, 4)
[1] "some"
str_right(x, 6)
[1] "string"
str_mid(x, 6, 4)
[1] "text"
我不知道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"
推荐文章
- 如何在Typescript中解析JSON字符串
- 使用pandoc从Markdown转换为PDF时设置空白大小
- 如何分割逗号分隔的字符串?
- Java字符串—查看字符串是否只包含数字而不包含字母
- 用javascript检查输入字符串中是否包含数字
- ggplot2折线图给出“geom_path:每组只包含一个观测值。你需要调整群体审美吗?”
- Java:检查enum是否包含给定的字符串?
- 用PHP删除字符串的前4个字符
- 如何从字符串的开始或结束删除所有空白?
- 字符串到JS中的对象
- 为什么Python的原始字符串不能以一个反斜杠结尾?
- 我如何读整个文件到性病::字符串在c++ ?
- 从以特定字符开头的字符串中获取子字符串
- 如何用前导零格式化Java字符串?
- Android Split字符串