如何从R中的字符串中获得最后n个字符? 有没有像SQL的RIGHT这样的函数?
当前回答
substr的另一种替代方法是将字符串拆分为单个字符的列表并处理:
N <- 2
sapply(strsplit(x, ""), function(x, n) paste(tail(x, n), collapse = ""), N)
其他回答
试试这个:
x <- "some text in a string"
n <- 5
substr(x, nchar(x)-n, nchar(x))
它应该给出:
[1] "string"
substr的另一种替代方法是将字符串拆分为单个字符的列表并处理:
N <- 2
sapply(strsplit(x, ""), function(x, n) paste(tail(x, n), collapse = ""), N)
我也使用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。
更新:正如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个字符。
之前有人使用了类似的解决方案,但我发现下面的想法更容易:
> 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))
这将产生所需的最后一个字符。