Как я могу получить последние n символов из строки в R? Есть ли такая функция, как RIGHT в SQL?
271
Я ничего не знаю в базе 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"
nchar(x)
двойного вызова , назначая его локальной переменной?Если вы не возражаете против использования
stringr
пакета,str_sub
это удобно, потому что вы можете использовать негативы для обратного отсчета:Или, как Макс указывает в комментарии к этому ответу,
источник
stringr
что был переделан с использованиемstringi
в качестве бэкэнда, так что теперь следует работать с NA и т.д.Используйте
stri_sub
функцию изstringi
пакета. Чтобы получить подстроку с конца, используйте отрицательные числа. Смотрите ниже примеры:Вы можете установить этот пакет с github: https://github.com/Rexamine/stringi
Теперь он доступен на CRAN, просто наберите
установить этот пакет.
источник
источник
Другой достаточно простой способ - использовать регулярные выражения и
sub
:Итак, «избавьтесь от всего, за чем следует один персонаж». Чтобы получить больше символов в конце, добавьте, однако, много точек в проверочное утверждение:
где
.{2}
означает..
или «любые два символа», то есть означает «избавиться от всего, за которым следуют два символа».для трех символов и т. д. Вы можете установить количество символов для захвата с помощью переменной, но вам потребуется
paste
значение переменной в строке регулярного выражения:источник
regmatches(x, regexpr(".{6}$", x))
ОБНОВЛЕНИЕ : как отмечает mdsumner , исходный код уже векторизован, поскольку substr имеет значение. Должен был быть более осторожным.
И если вы хотите векторизованную версию (на основе кода Андри )
Обратите внимание , что я изменил ,
(nchar(x)-n)
чтобы(nchar(x)-n+1)
получитьn
символы.источник
(nchar(x)-n)
до(nchar(x)-n+1)
»Простое базовое решение R с использованием
substring()
функции (кто знал, что эта функция вообще существует?):Преимущество состоит в том, что он в основном
substr()
ниже, но имеет конечное значение по умолчанию 1 000 000.Примеры:
источник
Альтернативой
substr
является разделение строки на список отдельных символов и обработка этого:источник
Я
substr
тоже пользуюсь , но по-другому. Я хочу извлечь последние 6 символов «Дай мне свою еду». Вот шаги:(1) разделить персонажей
(2) Извлечь последние 6 символов
Вывод:
Каждый из символов может быть доступен
splits[[1]][x]
, где х от 1 до 6.источник
кто-то раньше использовал подобное решение для моего, но мне легче думать, как показано ниже:
Это принесет последние символы по желанию.
источник
Попробуй это:
Это должно дать:
источник
Я использовал следующий код, чтобы получить последний символ строки.
Вы можете поиграть с nchar (stringOfInterest), чтобы выяснить, как получить последние несколько символов.
источник
Небольшая модификация решения @Andrie дает также дополнение:
Это было то, что я искал. И это приглашает на левую сторону:
источник
На всякий случай, если нужно выбрать диапазон символов:
источник