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
Ich möchte die Submatrix extrahieren, deren Zeilen Spalte drei = 11 haben. 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 ohne Schleifen tun. Ich bin neu bei R, daher ist dies wahrscheinlich sehr offensichtlich, aber die Dokumentation ist oft etwas knapp.
[ ]
den Antworten aus, und Sie werden dies deutlicher sehen.Antworten:
Dies ist einfacher, wenn Sie Ihre Matrix mit as.data.frame () in einen Datenrahmen konvertieren. In diesem Fall funktionieren die vorherigen Antworten (mit Teilmenge oder m $ drei), andernfalls nicht.
Um die Operation für eine Matrix auszuführen , können Sie eine Spalte nach Namen definieren:
Oder nach Nummer:
Beachten Sie, dass das Ergebnis ein ganzzahliger Vektor und keine Matrix ist, wenn nur eine Zeile übereinstimmt.
quelle
m[m[,3] == 11,,drop=FALSE]
df <- df[!which(df$ARID3A:df$YY1 == "U"),]
Hier möchte ich beispielsweise die Zeilen aus meinem df entfernen, in denen ein Spaltenbereich (ARID3A: YY1) den Wert U enthält .Der folgende Befehl wählt die erste Zeile der obigen Matrix aus.
Und dies wählt die letzten drei aus.
Das Ergebnis ist in beiden Fällen eine Matrix. Wenn Sie Spaltennamen zur Auswahl von Spalten verwenden möchten, konvertieren Sie diese am besten in einen Datenrahmen mit
Dann können Sie mit auswählen
Sie können auch den Befehl subset verwenden.
quelle
Ich werde einen einfachen Ansatz mit dem Paket dplyr wählen.
Wenn der Datenrahmen Daten sind.
quelle
Teilmenge ist eine sehr langsame Funktion, und ich persönlich finde sie nutzlos.
Ich nehme an, Sie eine data.frame haben, Array, Matrix genannt
Mat
mitA
,B
,C
als Spaltennamen; Dann müssen Sie nur noch:Im Fall einer Bedingung in einer Spalte sagen wir Spalte A.
Bei mehreren Bedingungen in verschiedenen Spalten können Sie eine Dummy-Variable erstellen. Angenommen, die Bedingungen sind
A = 10
,B = 5
undC > 2
dann haben wir:Durch Testen des Geschwindigkeitsvorteils mit
system.time
ist diewhich
Methode 10x schneller als diesubset
Methode.quelle
Wenn Ihre Matrix aufgerufen wird
m
, verwenden Sie einfach:quelle
df <- df[!which(df$ARID3A:df$YY1 == "U"),]
Hier möchte ich zum Beispiel die Zeilen aus meinem df entfernen, in denen ein Spaltenbereich (ARID3A: YY1) den Wert enthältU
Wenn der Datensatz als Daten bezeichnet wird, erfüllen alle Zeilen eine Bedingung, bei der der Wert der Spalte 'pm2.5'> 300 empfangen werden kann von -
Daten [Daten ['pm2.5']> 300,]
quelle