2 votes

dans R : supprimer les lignes ne contenant pas d'entier (comme les caractères i.e.) d'une base de données

Mon cadre de données df ressemble à ce qui suit :

Variable A Variable B Variable C
9          2          1
2          0          don't know
maybe      1          1
?          0          3

Je dois supprimer toutes les lignes où des valeurs non numériques sont utilisées. Cela devrait ressembler à ceci par la suite :

Variable A Variable B Variable C
9          2          1

J'ai pensé à quelque chose comme

df[! grepl(*!= numerical*, df),]

ou

df[! df %in% *!= numerical*, ]

mais je ne trouve rien que je puisse utiliser comme entrée pour "prendre tout ce qui ne correspond pas à des valeurs numériques". Pourriez-vous m'aider ? Je vous remercie de votre aide et vous prie d'agréer, Madame, Monsieur, l'expression de mes sentiments distingués.

3voto

akrun Points 148302

Une option consisterait à parcourir les colonnes en boucle, à les convertir en numeric afin que tous les éléments non numériques soient convertis en NA, vérifier la présence de NA avec is.na , négation ( ! ), comparez les éléments correspondants de list avec Reduce et & et l'utiliser pour subdiviser les lignes.

df[Reduce(`&`, lapply(df, function(x) !is.na(as.numeric(x)))),]

0voto

Indi Points 762

Ce n'est peut-être pas la meilleure façon de procéder, mais cela fonctionne.

s est le fichier qui contient vos données.

contains <-  lapply(seq_len(nrow(s)), function(i){
    yes <-  grep("[^0-9.]" , s[i,]) #regex for presence of non-digits 
    ifelse(identical(yes, integer(0)),F,T)
}) %>% unlist

 s <- s[which(!contains),]

Merci de votre attention !

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X