R: Обрезать символы, кроме пробелов, из строки - PullRequest
1 голос
/ 19 июня 2019

В R, если вы хотите обрезать все пробельные символы с конца строки, вы должны выполнить обрезку (to.be.trimmed, "right"), например, так:

> trimws("nauris        ", "right")
[1] "nauris"

Что если вместо обрезки пробельных символов я бы хотел обрезать точки (или некоторые другие символы)?В Python вы бы сделали string.rstrip(char).Вот некоторые желаемые результаты:

> rstrip("nauris", "s")
[1] "nauri"
> rstrip("nauris.", ".")
[1] "nauris"
> rstrip("nauris....", ".")
[1] "nauris"
> rstrip("stack", "c")
[1] "stack"

Задание указанного периода в качестве последнего аргумента не работает, так как он просто возвращает пустую строку:

trimws("nauris.", "right", ".")
[1] ""

Ответы [ 2 ]

6 голосов
/ 19 июня 2019

Начиная с версии R 3.6.0 trimws() имеет аргумент пробела, поэтому вы можете сделать:

trimws("nauris", "right", whitespace = "s")
[1] "nauri"

trimws("nauris.....", "right", whitespace = "\\.")
[1] "nauris"

В документации указано, что внутренне trimws() использует sub(re, "", *, perl = TRUE), поэтому необходимо экранировать специальные символы.

1 голос
/ 19 июня 2019

Для людей, которые еще не обновили R (таких как я), вы можете скопировать функцию trimws и изменить ее в соответствии с нашими требованиями.

trim_periods <- function (x, which = c("both", "left", "right")) {
   which <- match.arg(which)
   mysub <- function(re, x) sub(re, "", x, perl = TRUE)
  if (which == "left") 
     return(mysub("^[.]+", x))
   if (which == "right") 
      return(mysub("[.]+$", x))
   mysub("[.]+$", mysub("^[.]+", x))
}

trim_periods("...abc..def..", "right")
#[1] "...abc..def"

trim_periods("...abc..def..")
#[1] "abc..def"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...