Переименуйте несколько уровней фактора, все из которых содержат одно и то же слово

Например:

x1 <- data.frame("ID" = c(1:6), 
                  "Position" = c("Left-Striker", 
                                 "Goalkeeper", 
                                 "Right-Striker",
                                 "Striker",
                                 "Centerback",
                                 "Right-Midfield"))

возвращается:

      ID       Position
   1  1    Left-Striker
   2  2      Goalkeeper
   3  3   Right-Striker
   4  4         Striker
   5  5      Centerback
   6  6  Right-Midfield

Я хотел бы переименовать все факторы со словом «Striker» внутри фактора в «Striker» как имя фактора. Таким образом, кадр данных выглядит так:

      ID       Position
   1  1         Striker
   2  2      Goalkeeper
   3  3         Striker
   4  4         Striker
   5  5      Centerback
   6  6  Right-Midfield
0
задан 13 August 2018 в 14:02

3 ответа

Используя gsub, мы можем удалить первое слово, используя

x1$Position <- gsub('(^\\w+-)(Striker)','\\2',x1$Position)

(), используемый для группировки выражений (^\\w+-) первой группы выполните поиск одного или нескольких слов, а затем - (Striker) откомандированный групповой поиск для литерала Striker. \\2 означает отбрасывание первой группы и возвращение второй группы, которая является Striker.
1
ответ дан 15 August 2018 в 17:04
  • 1
    Спасибо за ответ. Что делает «(^ \\ w + -)» и "\\ 2" имею в виду? Или что мне нужно, чтобы Google понял их? – CTPJ 13 August 2018 в 14:33
  • 2
    @CTPJ, пожалуйста, проверьте мое обновление. – A. Suliman 13 August 2018 в 14:39

Это также можно сделать с пакетом forcats:

forcats::fct_collapse(x1$Position, "Striker" = c("Left-Striker", "Striker", "Right-Striker"))
1
ответ дан 15 August 2018 в 17:04

Использование regex

library(stringr)

x1$Position <- str_replace_all(x1$Position, "[:alpha:]+-?Striker", "Striker")

Из stringr

Существует ряд предварительно построенных классов, которые можно использовать внутри []: [: alpha:]: буквы.

+ означает один или несколько. [F3] находится в вашей строке.

1
ответ дан 15 August 2018 в 17:04
  • 1
    Пожалуйста, не могли бы вы объяснить, что [: alpha:] + -? означает? Или что я могу искать в Google для понимания? – CTPJ 13 August 2018 в 14:54

Другие вопросы по тегам:

Похожие вопросы: