如何從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)'分配給局部變量兩次更有效嗎? –