Вернуть, сколько обрезок обрезается на кадре данных - PullRequest
1 голос
/ 03 мая 2019

Я использую trimws (x) для обрезки пробелов из набора данных.

Как и вывод "найти и заменить" в Excel, я хотел бы знать, сколько работы триммеры сделали;в частности, сколько пустого пространства было удалено из всего фрейма данных - в основном для моего удовлетворения, но также потенциально для дальнейшей группировки работы, выполняемой обрезками, по другим переменным, чтобы увидеть, есть ли какой-либо шаблон, где белое пространство ползет вверх по течению.

Пример:

x <- "  Some text.  "

trimws(x)

А потом какой-то вывод, например:

# trimws removed 1708 white space characters and 13 new line characters

Ответы [ 2 ]

1 голос
/ 03 мая 2019

Это количество удаленных пробельных символов:

x <- "  Some text.  "
nchar(x) - nchar(trimws(x)) # no of whitespace characters removed
## [1] 4  

Единственный пробел в примере - это пробел, но, вероятно, единственные вхождения новой строки, возврата и табуляции находятся в обрезанной части, поэтому, если это возможнотогда это также дает количество удаленных пробелов:

xx <- gsub("[\n\r\t]", "", x)
nchar(xx) - nchar(trimws(xx))  # no of spaces removed

, а разница между этим и первым фрагментом кода, приведенным выше, заключается в количестве удаленных не пробелов.

0 голосов
/ 03 мая 2019

На основе вашего примера вы можете изменить текущий код для trimws() (доступно здесь ).

Вам просто нужно изменить sub() на grep() для подсчетасколько space символов найдено в x.

my_trimws = function(x, which = c("both", "left", "right")) {
  which = match.arg(which)
  mysub = function(re, x) grep(re, x, perl = TRUE)

  if (which == "left")
    n <- mysub("^[ \t\r\n]+", x)
  if (which == "right")
    n <- mysub("[ \t\r\n]+$", x)

  n <- sum(mysub("^[ \t\r\n]+", x), mysub("[ \t\r\n]+$", x))

  cat("trimws() removed ", n, " spaces\n") # prints to the console
  return(n)
}

Ваш пример:

x <- "  Some text.  "
r <- my_trimws(x)
#trimws() removed  2  spaces
# r
# [1] 2
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...