Извлечь первые (или последние) n символов строки


83

Я хочу извлечь первые (или последние) n символов строки. Это будет эквивалент Excel LEFT()и RIGHT(). Небольшой пример:

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

Я хотел бы создать bстроку, равную первым 4 буквам a:

b
# [1] "left"

Что я должен делать?

Ответы:


89

Видеть ?substr

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

Я рекомендую взглянуть на ответ @juba ниже. Он предлагает stringrрешение.
Jochem

57

stringrПакет предоставляет str_subфункцию, которая немного проще в использовании , чем substr, особенно если вы хотите , чтобы извлечь правильные части вашей строки:

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

3
Благодарю за подсказку, джуба; кстати, я думаю, что приму ответ rcs, потому что он касается базы R:)
Лиза Энн,

4
Знать базу R - это хорошо, но если дело доходит до строковых функций, ваша жизнь будет проще, если вы будете использовать только строку, как упомянул @juba
Дитер Менне

1
Я согласен с Дитером. Обучение stringrизбавит вас почти от такого же раздражения, как lubridate.
Эндрю Бреза

25

Вы можете легко получить функции Right () и Left (), начиная с пакета Rbase:

  • правильная функция

    right = function (string, char) {
        substr(string,nchar(string)-(char-1),nchar(string))
    }
    
  • левая функция

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

вы можете использовать эти две пользовательские функции точно так же, как left () и right () в excel. Надеюсь, вы найдете это полезным


6

Сделайте это простым и используйте базовые функции 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()Функция сообщает вам , где начать и остановитьsubstr(x, start, stop)


2

Если вы едете из Microsoft Excel, следующие функции будут аналогичны LEFT(), RIGHT()и MID()функции.


# 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)
  }

Примеры:

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"

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.