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