programing

R 벡터의 모든 요소에서 마지막 n자를 제거하는 방법

oldcodes 2023. 6. 18. 16:17
반응형

R 벡터의 모든 요소에서 마지막 n자를 제거하는 방법

저는 R이 매우 생소하며, 온라인에서 벡터의 모든 요소에서 마지막 n자를 제거하는 방법에 대한 간단한 예를 찾을 수 없었습니다(배열?).

저는 자바 출신이기 때문에, 제가 하고 싶은 것은 모든 요소를 반복하는 것입니다.a$data모든 요소에서 마지막 3자를 제거합니다.

어떻게 하시겠습니까?

여기 제가 무엇을 할 것인지에 대한 예시가 있습니다.그게 당신이 찾고 있는 것이기를 바랍니다.

char_array = c("foo_bar","bar_foo","apple","beer")
a = data.frame("data"=char_array,"data2"=1:4)
a$data = substr(a$data,1,nchar(a$data)-3)

이제 다음을 포함해야 합니다.

  data data2
1 foo_ 1
2 bar_ 2
3   ap 3
4    b 4

방법이 있습니다.gsub:

cs <- c("foo_bar","bar_foo","apple","beer")
gsub('.{3}$', '', cs)
# [1] "foo_" "bar_" "ap"   "b"

@nfmcclure의 답변과 대부분 동일하지만, 저는 사용하는 것을 선호합니다.stringr패키지는 기본 R에 있는 것보다 이름이 가장 일관되고 설명적인 기능 세트를 제공합니다(사실 저는 이름이 기억나지 않아 항상 "R의 문자 수를 얻는 방법"을 검색합니다).nchar()).

library(stringr)
str_sub(iris$Species, end=-4)
#or 
str_sub(iris$Species, 1, str_length(iris$Species)-3)

각 값에서 마지막 3자를 제거합니다.Species기둥.

stringi 패키지에서도 마찬가지입니다.

library('stringi')
char_array <- c("foo_bar","bar_foo","apple","beer")
a <- data.frame("data"=char_array, "data2"=1:4)
(a$data <- stri_sub(a$data, 1, -4))  # from the first to the (last-4)-th character
## [1] "foo_" "bar_" "ap"   "b" 

다음을 사용하는 @Mathhew_Plourde와 유사합니다.gsub

그러나 0자로 트리밍되는 패턴을 사용합니다. 즉, 원래 문자열이 자를 문자 수보다 짧은 경우 " "를 반환합니다.

cs <- c("foo_bar","bar_foo","apple","beer","so","a")
gsub('.{0,3}$', '', cs)
# [1] "foo_" "bar_" "ap"   "b"    ""    ""

다른 점은,{0,3}정량자는 0에서 3개의 일치를 나타내는 반면,{3}정확히 3개의 일치 항목이 필요합니다. 그렇지 않으면 일치 항목이 없습니다.gsub수정되지 않은 원래 문자열을 반환합니다.

N.B. 사용{,3}와 동등할 것입니다.{0,3}저는 단순히 후자의 표기법을 선호합니다.

정규식 수량자에 대한 자세한 내용은 다음을 참조하십시오. https://www.regular-expressions.info/refrepeat.html

문자열의 n자로 작업하여 잘라내기/바꾸기할 때의 친근한 힌트:

--> 문자열의 공백을 주의하십시오!

사용하다base::gsub(' ', '', x, fixed = TRUE)문자열에서 원하지 않는 공백을 제거합니다.저는 위에서 제공한 훌륭한 솔루션이 왜 저에게 효과가 없는지 알아보기 위해 꽤 많은 시간을 보냈습니다. 다른 사람들에게도 유용할 것이라고 생각했습니다;)

언급URL : https://stackoverflow.com/questions/23413331/how-to-remove-last-n-characters-from-every-element-in-the-r-vector

반응형