Заменить значения во фрейме данных

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

Например, в приведенном ниже кадре данных мне нужно, чтобы все имена всех "Alkohol Free Beers" в столбце "Тип" были просто записаны как Alkohol Free и "5л пива" как Beer 5l

df <- data.frame(Type = c('Beer','Beer 1', 'Alkoholfree Beer', 'Beer Alkoholfree', 'Beer Alkfre', '0.33 Alko free beer', 'Beer 5l', '5l Beer', 'BeeR 5l'), total = sample(1:10, 9))

                 Type total
1                Beer     8
2              Beer 1     5
3    Alkoholfree Beer    10
4    Beer Alkoholfree     6
5         Beer Alkfre     4
6 0.33 Alko free beer     9
7             Beer 5l     7
8             5l Beer     2
9             BeeR 5l     3

Могу ли я выполнить это с помощью replace() или же which() функция?

2 ответа

Решение

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

library(tidyverse)

df %>%
   mutate(Type = case_when(str_detect(Type, "Alk") ~ "Alkohol Free",
                          str_detect(Type, "5l") ~ "Beer 5l",
                          TRUE ~ "Beer"))
          Type total
1         Beer     5
2         Beer     6
3 Alkohol Free     4
4 Alkohol Free     9
5 Alkohol Free     7
6 Alkohol Free     3
7      Beer 5l     8
8      Beer 5l     1
9      Beer 5l    10

Это решение использует str_detectот stringr пакет, чтобы определить, Type включает "Alk" (обозначает безалкогольное пиво) или "5л" (обозначает 5-литровое пиво) и перезаписывает столбец так, как вы хотите. Вы не указали, что хотите делать с тем пивом, которое не было ни безалкогольным, ни пятилитровым, поэтому я сделал третью категорию, просто называемую "Пиво".

Не могли бы вы попробовать следующий и дайте мне знать о том же.

df %>%
  mutate_all(funs(gsub("Alkoholfree","Alkohol free",.))) %>%
  mutate_all(funs(gsub("5l [bB]eers","Beer 5l",.)))

Вывод будет следующим.

> df %>%
+   mutate_all(funs(gsub("Alkoholfree","Alkohol free",.))) %>%
+   mutate_all(funs(gsub("5l [bB]eers","Beer 5l",.)))
                 Type total
1                Beer     8
2              Beer 1     2
3   Alkohol free Beer     9
4   Beer Alkohol free     4
5         Beer Alkfre     6
6 0.33 Alko free beer     5
7             Beer 5l     3
8             5l Beer     7
9             BeeR 5l    10
Другие вопросы по тегам