Je souhaite sélectionner des colonnes dans un bloc de données si l'une des valeurs de la colonne est supérieure à 3.
Dans cet exemple de mtcars
, ce critère supprimera vs code> et
am
, car il n'y a pas de valeur supérieure à 3
dans ces colonnes.
mpg cyl disp hp drat wt qsec vs am gear carb Mazda RX4 21.0 6 160.0 110 3.90 2.620 16.46 0 1 4 4 Mazda RX4 Wag 21.0 6 160.0 110 3.90 2.875 17.02 0 1 4 4 Datsun 710 22.8 4 108.0 93 3.85 2.320 18.61 1 1 4 1 Hornet 4 Drive 21.4 6 258.0 110 3.08 3.215 19.44 1 0 3 1 Hornet Sportabout 18.7 8 360.0 175 3.15 3.440 17.02 0 0 3 2
3 Réponses :
Je pense que
library(dplyr) mtcars %>% select_if(~max(.)>3)
fait ce que vous voulez. Si vous voulez une solution tidyverse (puisque vous avez dplyr
dans les balises),
## find max val for each column maxcolval <- apply(mtcars,MARGIN=2,FUN=max) ## select columns mtcars[maxcolval>3]
Nous pouvons créer un vecteur logique en comparant le dataframe avec 3, puis prendre la somme des colonnes en utilisant colSums
et sélectionner uniquement les colonnes qui ont au moins une valeur supérieure à 3.
mtcars[sapply(mtcars, function(x) any(x > 3))]
Variation utilisant sapply
mtcars[colSums(mtcars > 3) > 0] # mpg cyl disp hp drat wt qsec gear carb #Mazda RX4 21.0 6 160.0 110 3.90 2.620 16.46 4 4 #Mazda RX4 Wag 21.0 6 160.0 110 3.90 2.875 17.02 4 4 #Datsun 710 22.8 4 108.0 93 3.85 2.320 18.61 4 1 #Hornet 4 Drive 21.4 6 258.0 110 3.08 3.215 19.44 3 1 #....
oups désolé, j'ai remarqué que les données que j'ai sont matricielles, et si j'applique cela, cela ne fonctionne pas .. Mais si je fais ce dataf <- as.data.frame (matrice) et que je l'applique ensuite sur dataf cela fonctionne ... y a-t-il d'autres fonctions que je peux appliquer directement sur Matrix?
@Vlad En cas de matrice, il vous suffit d'ajouter une virgule supplémentaire aux colonnes du sous-ensemble. Par exemple, mat <- as.matrix (mtcars); mat [ colSums (mat> 3)> 0]
Avec purrr
:
# mpg cyl disp hp drat wt qsec gear carb # Mazda RX4 21.0 6 160.0 110 3.90 2.620 16.46 4 4 # Mazda RX4 Wag 21.0 6 160.0 110 3.90 2.875 17.02 4 4 # Datsun 710 22.8 4 108.0 93 3.85 2.320 18.61 4 1 # Hornet 4 Drive 21.4 6 258.0 110 3.08 3.215 19.44 3 1 # Hornet Sportabout 18.7 8 360.0 175 3.15 3.440 17.02 3 2
Output(truncated):
mtcars[,purrr::map_lgl(mtcars,~any(.x>3))]