R Str_remove из нескольких столбцов в трубе - PullRequest
1 голос
/ 05 марта 2020

У меня есть фрейм данных со столбцами, которые содержат беспорядочную смесь символов и цифр:

col1 col2 col3 col4 col5
x-x  xxx  xx*  xx-  xxx
*y*  yyy  y*y  yy*  yyy

Я хочу удалить все символы, которые соответствуют определенному шаблону регулярных выражений.

Теперь Я мог бы просто сделать это колонкой за раз:

data$col3 <- str_remove(data$col3, "[\\-\\*]")
data$col4 <- str_remove(data$col4, "[\\-\\*]")

Но это кажется излишне неуклюжим решением. Я хочу добиться этого с помощью одной команды внутри канала, например:

data<- data %>%
  str_remove(columns 1,3 and 4, "[\\-\\*]")

Я бы предпочел идентифицировать столбцы по позиции индекса, так как имена столбцов длинные, но обязательно так.

1 Ответ

3 голосов
/ 05 марта 2020

Мы можем сделать это следующим образом:

library(tidyverse)

df1 %>% mutate_at(vars(1,3,4),  funs(gsub("[*-]", "", .)))

 col1 col2 col3 col4 col5
1   xx  xxx   xx   xx  xxx
2    y  yyy   yy   yy  yyy

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

Данные:

df1 <- structure(list(col1 = structure(2:1, .Label = c("*y*", "x-x"), class = "factor"), 
    col2 = structure(1:2, .Label = c("xxx", "yyy"), class = "factor"), 
    col3 = structure(1:2, .Label = c("xx*", "y*y"), class = "factor"), 
    col4 = structure(1:2, .Label = c("xx-", "yy*"), class = "factor"), 
    col5 = structure(1:2, .Label = c("xxx", "yyy"), class = "factor")), class = "data.frame", row.names = c(NA, 
-2L))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...