Je cherche à standardiser un ensemble de chaînes saisies manuellement, de sorte que:
library(tidyverse) library(stringdist) index <- seq(1,5,1) fruit <- c("Apple Pie", "Apple Pie.", "Apple. Pie", "Apple Pie", "Pear") df <- data.frame(index, fruit) %>% mutate(grouping = phonetic(fruit)) %>% add_count(fruit) %>% # Missing Code select(index, fruit)
ressemble à:
index fruit 1 Apple Pie 2 Apple Pie 3 Apple Pie 4 Apple Pie 5 Pear
Pour mon cas d'utilisation, les regrouper par son phonétique , c'est bien, mais je manque le morceau sur la façon de remplacer le moins commun chaînes avec les plus courantes.
index fruit 1 Apple Pie 2 Apple Pie. 3 Apple. Pie 4 Apple Pie 5 Pear
3 Réponses :
Nous pouvons utiliser str_remove
pour supprimer le .
Mode <- function(x) { ux <- unique(x) ux[which.max(tabulate(match(x, ux)))] } data.frame(index, fruit) %>% mutate(grouping = phonetic(fruit)) %>% group_by(grouping) %>% mutate(fruit = Mode(fruit)) # A tibble: 5 x 3 # Groups: grouping [2] # index fruit grouping # <dbl> <fct> <chr> #1 1 Apple Pie A141 #2 2 Apple Pie A141 #3 3 Apple Pie A141 #4 4 Apple Pie A141 #5 5 Pear P600
Si nous devons utiliser phonétique code> et trouvez la valeur la plus fréquente
library(dplyr) library(stringr) data.frame(index, fruit) %>% mutate(fruit = str_remove(fruit, "\\.")) # index fruit #1 1 Apple Pie #2 2 Apple Pie #3 3 Apple Pie #4 4 Apple Pie #5 5 Pear
Y a-t-il un avantage de flexibilité à créer la fonction Mode
?
@rsylatian Il peut être réutilisé comme un bloc dans d'autres fonctions.
On dirait que vous avez besoin du groupement group_by
, puis sélectionnez l'élément (Mode) le plus fréquent
df%>%mutate(grouping = phonetic(fruit))%>% group_by(grouping)%>% mutate(fruit = names(which.max(table(fruit)))) # A tibble: 5 x 3 # Groups: grouping [2] index fruit grouping <dbl> <fctr> <chr> 1 1 Apple Pie A141 2 2 Apple Pie A141 3 3 Apple Pie A141 4 4 Apple Pie A141 5 5 Pear P600
Une autre façon pourrait être:
fruit %>% enframe() %>% mutate(grouping = phonetic(fruit)) %>% add_count(value, grouping) %>% group_by(grouping) %>% mutate(value = value[match(max(n), n)]) %>% select(-n) %>% ungroup() name value grouping <int> <chr> <chr> 1 1 Apple Pie A141 2 2 Apple Pie A141 3 3 Apple Pie A141 4 4 Apple Pie A141 5 5 Pear P600