En R avec une matrice:
one two three four
[1,] 1 6 11 16
[2,] 2 7 12 17
[3,] 3 8 11 18
[4,] 4 9 11 19
[5,] 5 10 15 20
Je veux extraire la sous-matrice dont les lignes ont la colonne trois = 11. C'est-à-dire:
one two three four
[1,] 1 6 11 16
[3,] 3 8 11 18
[4,] 4 9 11 19
Je veux faire cela sans boucler. Je suis nouveau sur R donc c'est probablement très évident, mais la documentation est souvent quelque peu laconique.
[ ]
les réponses et vous verrez cela plus clairement.Réponses:
C'est plus facile à faire si vous convertissez votre matrice en un bloc de données en utilisant as.data.frame (). Dans ce cas, les réponses précédentes (utilisant un sous-ensemble ou m $ trois) fonctionneront, sinon elles ne le seront pas.
Pour effectuer l'opération sur une matrice , vous pouvez définir une colonne par son nom:
Ou par numéro:
Notez que si une seule ligne correspond, le résultat est un vecteur entier, pas une matrice.
la source
m[m[,3] == 11,,drop=FALSE]
df <- df[!which(df$ARID3A:df$YY1 == "U"),]
, ici , je veux supprimer les lignes de mon df où une gamme de colonnes (ARID3A: YY1) contient la valeur U .La commande suivante sélectionnera la première ligne de la matrice ci-dessus.
Et cela sélectionnera les trois derniers.
Le résultat sera une matrice dans les deux cas. Si vous souhaitez utiliser des noms de colonnes pour sélectionner des colonnes, il vaut mieux la convertir en un dataframe avec
Ensuite, vous pouvez sélectionner avec
Ou, vous pouvez utiliser la commande subset.
la source
Je vais choisir une approche simple en utilisant le package dplyr.
Si le dataframe est data.
la source
Le sous-ensemble est une fonction très lente, et personnellement je le trouve inutile.
Je suppose que vous avez un data.frame, tableau, appelée matrice
Mat
avecA
,B
,C
comme les noms de colonnes; alors tout ce que vous avez à faire est:Dans le cas d'une condition sur une colonne, disons la colonne A
Dans le cas de plusieurs conditions sur une colonne différente, vous pouvez créer une variable factice. Supposons que les conditions soient
A = 10
,B = 5
etC > 2
, alors nous avons:En testant l'avantage de vitesse avec
system.time
, lawhich
méthode est 10 fois plus rapide que lasubset
méthode.la source
Si votre matrice est appelée
m
, utilisez simplement:la source
df <- df[!which(df$ARID3A:df$YY1 == "U"),]
, ici, je veux supprimer ces lignes de mon df où une plage de colonnes (ARID3A: YY1) contient la valeurU
Si l'ensemble de données est appelé data, alors toutes les lignes remplissant une condition où la valeur de la colonne 'pm2.5'> 300 peuvent être reçues par -
données [données ['pm2.5']> 300,]
la source