Wyodrębnij pierwsze (lub ostatnie) n znaków ciągu


83

Chcę wyodrębnić pierwsze (lub ostatnie) n znaków ciągu. Byłoby to odpowiednikiem programu Excel LEFT()i RIGHT(). Mały przykład:

# create a string
a <- paste('left', 'right', sep = '')
a
# [1] "leftright"

Chciałbym utworzyć bciąg, który jest równy 4 pierwszym literom a:

b
# [1] "left"

Co powinienem zrobić?

Odpowiedzi:


89

Widzieć ?substr

R> substr(a, 1, 4)
[1] "left"

Polecam spojrzeć na odpowiedź @ juba poniżej. Zapewnia stringrrozwiązanie.
Jochem

57

stringrPakiet zawiera str_subfunkcję, która jest nieco łatwiejsza w użyciu niż substr, zwłaszcza, jeśli chcesz, aby wyodrębnić odpowiednie fragmenty swojej ciąg:

R> str_sub("leftright",1,4)
[1] "left"
R> str_sub("leftright",-5,-1)
[1] "right"

3
Dziękuję za podpowiedź, juba; przy okazji myślę, że przyjmuję odpowiedź rcs, ponieważ dotyczy bazy R:)
Lisa Ann

4
Znajomość podstawy R jest dobra, ale jeśli chodzi o funkcje strunowe, twoje życie będzie łatwiejsze, jeśli użyjesz tylko struny, jak wspomniał @juba
Dieter Menne

1
Zgadzam się z Dieter. Nauka stringrzaoszczędzi ci prawie tyle samo irytacji, co lubridate.
Andrew Brēza

25

Możesz łatwo uzyskać funkcje Right () i Left () zaczynając od pakietu Rbase:

  • właściwa funkcja

    right = function (string, char) {
        substr(string,nchar(string)-(char-1),nchar(string))
    }
    
  • funkcja lewa

    left = function (string,char) {
        substr(string,1,char)
    }
    

możesz używać tych dwóch funkcji niestandardowych dokładnie tak samo, jak left () i right () w programie Excel. Mam nadzieję, że okaże się to przydatne


6

Uprość to i użyj podstawowych funkcji R:

# To get the LEFT part:
> substr(a, 1, 4)
[1] "left"
> 
# To get the MIDDLE part:
> substr(a, 3, 7)
[1] "ftrig"
> 
# To get the RIGHT part:
> substr(a, 5, 10)
[1] "right"

substr()Funkcja powie Ci, gdzie start i stopsubstr(x, start, stop)


2

Jeśli pochodzą z programu Microsoft Excel, następujące funkcje będą podobne LEFT(), RIGHT()oraz MID()funkcji.


# This counts from the left and then extract n characters

str_left <- function(string, n) {
  substr(string, 1, n)
}



# This counts from the right and then extract n characters

str_right <- function(string, n) {
  substr(string, nchar(string) - (n - 1), nchar(string))
}


# This extract characters from the middle

str_mid <- function(string, from = 2, to = 5){
  
  substr(string, from, to)
  }

Przykłady:

x <- "some text in a string"
str_left(x, 4)
[1] "some"

str_right(x, 6)
[1] "string"

str_mid(x, 6, 9)
[1] "text"

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.