Заменить значения во фрейме данных
Я хотел бы заменить некоторые значения строк во фрейме данных, которые соответствуют определенному формату имени.
Например, в приведенном ниже кадре данных мне нужно, чтобы все имена всех "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