J'ai un dataframe avec une colonne "Food".
fruit_list <- c("banana","apple","orange","strawberry","kiwi","blueberry","lemon") for (r in 1:nrow(dataframe)) { for (i in 1:length(fruit_list)){ if (length(grep(fruit_list[i], dataframe$Food[r])) != 0) { dataframe$Food[r] <- paste("fruit") } } }
Chaque fois qu'un fruit apparaît, je veux remplacer le nom du fruit par "fruit".
J'ai essayé de créer un vecteur des noms des fruits. Ensuite, je parcours chaque ligne du dataframe et là où la chaîne correspond au fruit, je veux remplacer le nom du fruit par "fruit".
dataframe <- data.frame(Color = c("red","red","red","red","red","blue","blue","blue","blue","blue","green","green","green","green","green","orange","orange","orange","orange","orange"), Food = c("banana","apple","potato","orange","egg","strawberry","cheese","yogurt","kiwi","butter","kale","sugar","carrot","celery","radish","cereal","milk","blueberry","squash","lemon"), Count = c(2,5,4,8,10,7,5,6,9,11,1,8,5,3,7,9,2,3,6,4))
Comment utiliser ce général format de sorte que dataframe $ Food ne finisse pas simplement par être rempli de NA?
4 Réponses :
Avec dplyr
:
Color Food Count 1 red Fruit 2 2 red Fruit 5 3 red potato 4 4 red Fruit 8 5 red egg 10 6 blue Fruit 7 7 blue cheese 5 8 blue yogurt 6 9 blue Fruit 9 10 blue butter 11 11 green kale 1 12 green sugar 8 13 green carrot 5 14 green celery 3 15 green radish 7 16 orange cereal 9 17 orange milk 2 18 orange Fruit 3 19 orange squash 6 20 orange Fruit 4
Résultat:
library(dplyr) ataframe %>% mutate(Food=as.character(Food), Food=ifelse(Food%in%fruit_list,"Fruit",Food))#can change to fruit
Uniquement base R:
dataframe$Food <- sapply(dataframe$Food, function(x,fruit_list) ifelse(x %in% fruit_list, "fruit", as.character(x) ), fruit_list = fruit_list )
Vous n'avez pas nécessairement besoin de dplyr
pour cela.
Utilisez simplement:
dataframe$Food <- ifelse(dataframe$Food %in% fruit_list, "Fruit", as.character(dataframe$Food))
Vous pouvez le faire en une seule ligne en utilisant data.table
package-
> setDT(dataframe)[,Food:=ifelse(Food %in% fruit_list,"fruit",as.character(Food))] Color Food Count 1: red fruit 2 2: red fruit 5 3: red potato 4 4: red fruit 8 5: red egg 10 6: blue fruit 7 7: blue cheese 5 8: blue yogurt 6 9: blue fruit 9 10: blue butter 11 11: green kale 1 12: green sugar 8 13: green carrot 5 14: green celery 3 15: green radish 7 16: orange cereal 9 17: orange milk 2 18: orange fruit 3 19: orange squash 6 20: orange fruit 4
Avez-vous seulement besoin d'une boucle for?
dataframe $ Food [which (dataframe $ Food% in% fruit_list)] <- "fruit" fournit ce remplacement?
Vous pouvez essayer
dataframe%>% mutate (Food = case_when (Food% in% fruit_list ~ str_c (Food, "."), TRUE ~ as.character (Food)))
Je ne suis pas totalement marié à ce format mais il s'agit d'un exemple de dataframe et celui sur lequel je travaille est assez long, alors j'ai pensé que ce serait le meilleur format?