R의 문자열에서 마지막 n자를 어떻게 얻을 수 있습니까? SQL의 RIGHT와 같은 기능이 있습니까?
답변
기본 R에는 아무것도 모르지만 substr
and를 사용 하여이 작업을 수행하는 것은 간단합니다 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"
답변
패키지의 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")
이 패키지를 설치합니다.
답변
str = 'This is an example'
n = 7
result = substr(str,(nchar(str)+1)-n,nchar(str))
print(result)
> [1] "example"
>
답변
또 다른 합리적인 방법은 정규 표현식을 사용하는 것입니다 sub
.
sub('.*(?=.$)', '', string, perl=T)
따라서 “한 문자 뒤에 모든 것을 제거하십시오”. 끝에서 더 많은 문자를 얻으려면 lookahead 어설 션에 많은 점을 추가하십시오.
sub('.*(?=.{2}$)', '', string, perl=T)
어디 .{2}
수단 ..
그렇게하는 의미, 또는 “두 글자”, “모든 것을 제거는 두 문자 다음에”.
sub('.*(?=.{3}$)', '', string, perl=T)
변수를 사용하여 잡을 문자 수를 설정할 수 있지만 paste
변수 값을 정규식 문자열에 입력해야합니다.
n = 3
sub(paste('.+(?=.{', n, '})', sep=''), '', string, perl=T)
답변
업데이트 : 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
문자.
답변
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!"