Wählen Sie die Zeilen einer matrix, die eine Bedingung erfüllt
In R mit einer matrix:
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
Möchte ich extrahieren Sie die submatrix, deren Zeilen der Dritten Spalte = 11. Das heißt:
one two three four
[1,] 1 6 11 16
[3,] 3 8 11 18
[4,] 4 9 11 19
Ich möchte dies tun, ohne looping. Ich bin neu in R also ist das wohl sehr offensichtlich, aber die
Dokumentation ist oft etwas knapp.
- Die grundlegende Idee, die in jeder Antwort ist, dass, wenn Sie einen logischen Vektor/matrix (Wahrheiten und FALSEs) von der gleichen Länge wie der index, den Sie wählen, wird nur die Fälle, die WAHR sind. Ausführen des codes zwischen
[ ]
Sie die Antworten und Sie werden sehen, dies noch deutlicher.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dies ist leichter zu tun, wenn Sie konvertieren Sie Ihre matrix, um einen Daten-frame mit als.Daten.frame(). In diesem Fall werden die vorherigen Antworten (mit Untergruppen oder m$drei) arbeiten, sonst werden Sie nicht.
Zum ausführen des Vorgangs auf ein matrix, können Sie eine Spalte definieren, indem Sie Namen:
Oder nach der Anzahl:
Beachten Sie, dass wenn nur eine Zeile zutrifft, wird das Ergebnis ein integer-Vektor, keine matrix.
m[m[,3] == 11,,drop=FALSE]
df <- df[!which(df$ARID3A:df$YY1 == "U"),]
, hier möchte ich entfernen Sie diese Zeilen aus meinem df, wo eine Reihe von Spalten (ARID3A: YY1) enthält den Wert , U.Den folgenden Befehl wählen, wird die erste Zeile der matrix oben.
Und dies wird markieren Sie die letzten drei.
Wird das Ergebnis eine matrix, in beiden Fällen.
Wenn Sie möchten, verwenden Sie die Spalte-Namen zu wählen Sie Spalten dann würden Sie am besten ab, Umwandlung in einen dataframe mit
Dann können Sie mit
Oder, Sie könnte verwenden Sie den subset-Befehl.
Werde ich wählen, eine einfache Methode, mit der dplyr-package.
Wenn das dataframe ist-Daten.
Teilmenge ist eine sehr langsame Funktion , und ich persönlich finde es nutzlos.
Ich nehme an, Sie haben Daten.Rahmen -, array -, matrix genannt
Mat
mitA
,B
,C
als Spaltennamen; dann alles, was Sie tun müssen, ist:In dem Fall von einer Bedingung auf eine Spalte, sagen wir Spalte A
Werden, wenn mehrere Bedingungen auf anderen Spalte, die Sie erstellen können, wird eine dummy-variable. Nehmen wir an, die Bedingungen sind
A = 10
,B = 5
, undC > 2
, dann haben wir:Durch die Prüfung der speed-Vorteil mit
system.time
, diewhich
Methode ist 10x schneller als diesubset
Methode.Wenn die matrix genannt wird
m
, nutzen Sie einfach :df <- df[!which(df$ARID3A:df$YY1 == "U"),]
, hier möchte ich entfernen Sie diese Zeilen aus meinem df, wo eine Reihe von Spalten (ARID3A: YY1) enthält den WertU
Wenn das dataset mit dem Namen data, dann werden alle Zeilen treffen einen Zustand, in dem Wert der Spalte 'pm2.5' > 300 empfangen werden können, indem -
Daten[Daten['pm2.5'] >300,]