J'essaie d'imputer des valeurs manquantes en fonction d'un groupe. J'obtiens une erreur que la fonction median() nécessite des données numériques, mais toutes mes données sont numériques, donc je ne peux pas voir le problème. Voici un exemple minimalement reproductible.Médian remplacer, besoin de données numériques
set.seed(123)
cluster = sample(seq(1,10),1000,replace=TRUE)
V1 = sample(c(runif(100),NA),1000,replace=TRUE)
V2 = sample(c(runif(100),NA),1000,replace=TRUE)
df = as.data.frame(cbind(cluster,V1,V2))
df_fixed = by(df,df$cluster,function(x){replace(x,is.na(x),median(x, na.rm=TRUE))})
Erreur renvoyée:
erreur dans median.default (x, na.rm = TRUE): besoin de données numériques
Ce code fonctionne bien, de sorte que le problème est avec la fonction médiane.
df_fixed = by(df,df$cluster,function(x){replace(x,is.na(x),1)})
s'il vous plaît utiliser 'set.seed' lorsque vous utilisez des fonctions telles que' runif', 'etc pour faire échantillon réduit, reproductible – Sotos
' by' est df coupe en petits data.frames - qui ne sont pas classe numérique. Voulez-vous remplacer avec des médianes colonne-sage ou une médiane globale? –
J'essaye de remplacer la médiane de colonne sage pour chacun par le groupe. Donc si dans le groupe 1 et manquant, remplacez avec la médiane du groupe 1. – user137698