Il y a des centaines de niveaux dans une colonne et tous ne sont pas vraiment une valeur ajoutée - comme dans, environ 60% des niveaux représentent < 80% (ils ne se produisent pas plusieurs fois dans les données) et devrait également ne pas influencer le résultat. L'objectif est d'éliminer les niveaux qui ne contribuent pas plus de 80%. Quelqu'un pourrait-il m'aider? Merci d'avanceÉliminer les facteurs contribuant moins
-2
A
Répondre
1
Voici un processus simple qui repère les valeurs qui représentent moins de 80% de l'ensemble de données (lignes) et les regroupe en utilisant une nouvelle valeur. Ce processus utilise une colonne de caractères et non une colonne de facteur.
library(dplyr)
# example dataset
dt = data.frame(type = c("A","A","A","B","B","B","c","D"),
value = 1:8, stringsAsFactors = F)
dt
# type value
# 1 A 1
# 2 A 2
# 3 A 3
# 4 B 4
# 5 B 5
# 6 B 6
# 7 c 7
# 8 D 8
# count number of rows for each type
dt %>% count(type)
# # A tibble: 4 x 2
# type n
# <chr> <int>
# 1 A 3
# 2 B 3
# 3 c 1
# 4 D 1
# add cumulative percentages
dt %>%
count(type) %>%
mutate(Prc = n/sum(n),
CumPrc = cumsum(Prc))
# # A tibble: 4 x 4
# type n Prc CumPrc
# <chr> <int> <dbl> <dbl>
# 1 A 3 0.375 0.375
# 2 B 3 0.375 0.750
# 3 c 1 0.125 0.875
# 4 D 1 0.125 1.000
# pick the types you want to group together
dt %>%
count(type) %>%
mutate(Prc = n/sum(n),
CumPrc = cumsum(Prc)) %>%
filter(CumPrc > 0.80) %>%
pull(type) -> types_to_group
# group them
dt %>% mutate(type_upd = ifelse(type %in% types_to_group, "Rest", type))
# type value type_upd
# 1 A 1 A
# 2 A 2 A
# 3 A 3 A
# 4 B 4 B
# 5 B 5 B
# 6 B 6 B
# 7 c 7 Rest
# 8 D 8 Rest
+0
Merci AntoniosK - il y a bien sûr une charge cognitive dans la compréhension de la question :) – emeralddove
C'est ok à downvote - pourriez-vous s'il vous plaît ajouter des commentaires afin d'apporter des modifications? Je vous remercie. – emeralddove
Que voulez-vous dire par contribution? Utilisez-vous un test statistique? Laquelle? Pouvez-vous donner un exemple reproductible? –
Vous devez d'abord trouver un moyen raisonnable de repérer/spécifier les niveaux que vous souhaitez exclure. Vous pouvez le faire en fonction d'un test statistique ou en fonction de la popularité (niveaux avec très peu de lignes chacun). Ensuite, vous devriez penser si vous voulez les éliminer (vous éliminerez aussi les lignes entières) ou les recoder dans un autre niveau (par exemple "repos"). – AntoniosK