lignes de sous-ensemble avec toutes / toutes les colonnes plus grandes qu'une valeur spécifique
Avec
df <- data.frame(id=c(1:5), v1=c(0,15,9,12,7), v2=c(9,32,6,17,11))
Comment puis-je extraire les lignes avec des valeurs de TOUTES les colonnes de plus de 10, qui devrait revenir:
id v1 v2
2 2 15 32
4 4 12 17
Et si sur une colonne de plus de 10:
id v1 v2
2 2 15 32
4 4 12 17
5 5 7 11
source d'informationauteur Rock
Vous devez vous connecter pour publier un commentaire.
Voir les fonctions
all()
etany()
pour la première et la deuxième parties de vos questions, respectivement. Leapply()
fonction peut être utilisée pour exécuter des fonctions sur des lignes ou des colonnes. (MARGIN = 1
est lignes,MARGIN = 2
est de colonnes, etc). Remarque j'utiliseapply()
surdf[, -1]
d'ignorer laid
variable quand on fait des comparaisons.Partie 1:
Partie 2:
Pour voir ce qui se passe,
x > 10
renvoie une logique de vecteur pour chaque ligne (viaapply()
indiquant si chaque élément est plus grand que 10.all()
retourneTRUE
si tous élément du vecteur d'entrée sontTRUE
etFALSE
autrement.any()
retourneTRUE
si tout des éléments dans l'entrée estTRUE
etFALSE
si tous sontFALSE
.J'utilise ensuite la logique vecteur résultant de la
apply()
appelde sous-ensemble
df
(comme illustré ci-dessus).Cela peut être fait en utilisant
apply
avec une marge de 1, qui permet d'appliquer une fonction à chaque ligne. La fonction afin de vérifier une ligne donnée seraitDe sorte que le moyen d'extraire les lignes elles-mêmes est
Une option est une boucle ligne par ligne (par exemple, avec
apply
) et à l'aide deany
ouall
comme proposé dans les deux autres réponses. Toutefois, cela peut s'avérer inefficace pour les grandes trames de données.Un vectorisé approche serait d'utiliser
rowSums
pour déterminer le nombre de valeurs dans chaque ligne correspondant à votre critère de filtre et sur cette base.Lorsque le filtrage de lignes où tout est à moins de 10, c'est le même que le filtrage pour les cas où le nombre de valeurs de pas plus de 10 est 0:
De même,
rowSums
peut facilement être utilisé pour calculer les lignes avec quelque chose de supérieur à 10:L'accélération est clair avec une plus grande entrée: