Ich möchte Zeilen aus einer data.frame
basierend auf einer logischen Bedingung filtern . Nehmen wir an, ich habe einen Datenrahmen wie
expr_value cell_type
1 5.345618 bj fibroblast
2 5.195871 bj fibroblast
3 5.247274 bj fibroblast
4 5.929771 hesc
5 5.873096 hesc
6 5.665857 hesc
7 6.791656 hips
8 7.133673 hips
9 7.574058 hips
10 7.208041 hips
11 7.402100 hips
12 7.167792 hips
13 7.156971 hips
14 7.197543 hips
15 7.035404 hips
16 7.269474 hips
17 6.715059 hips
18 7.434339 hips
19 6.997586 hips
20 7.619770 hips
21 7.490749 hips
Ich möchte einen neuen Datenrahmen erhalten, der gleich aussieht, aber nur die Daten für einen Zelltyp enthält. ZB Teilmenge / Auswahlzeilen, die den Zelltyp "hesc" enthalten:
expr_value cell_type
1 5.929771 hesc
2 5.873096 hesc
3 5.665857 hesc
Oder entweder Zelltyp "bj Fibroblast" oder "hesc":
expr_value cell_type
1 5.345618 bj fibroblast
2 5.195871 bj fibroblast
3 5.247274 bj fibroblast
4 5.929771 hesc
5 5.873096 hesc
6 5.665857 hesc
Gibt es eine einfache Möglichkeit, dies zu tun?
Ich habe es versucht:
expr[expr[2] == 'hesc']
# [1] "5.929771" "5.873096" "5.665857" "hesc" "hesc" "hesc"
Wenn der ursprüngliche Datenrahmen "Ausdruck" heißt, die Ergebnisse jedoch im falschen Format angezeigt werden, wie Sie sehen können.
==
Beachten Sie, dass die Funktion alle NA-Datensätze sowie "hesc" aufnimmt, während dies%in%
nicht der Fall ist .Verwendung
subset
(zur interaktiven Verwendung)oder besser
dplyr::filter()
quelle
subset
hat eine große WARNUNG: "Dies ist eine Komfortfunktion, die für die interaktive Verwendung vorgesehen ist. Für die Programmierung ist es besser, die Standard-Teilmengenfunktionen wie [zu verwenden, und insbesondere die nicht standardisierte Bewertung der Argument- Teilmenge kann unerwartete Folgen haben . "Der Grund, warum
expr[expr[2] == 'hesc']
dies nicht funktioniert, ist, dass für einenx[y]
Datenrahmen Spalten und keine Zeilen ausgewählt werden. Wenn Sie Zeilen auswählen möchten, ändern Siex[y,]
stattdessen die Syntax :quelle
NA
Datensätze erfasst! Daher nicht anwendbar. Der Grund dafür schien darin zu liegen, dass der expr-DatenrahmenNA
in der gefilterten Spalte keine enthält . Wenn es dort istNA
, ist Ihr Weg nicht anwendbar, wie ich zuvor sagte.Sie könnten das
dplyr
Paket verwenden:quelle
Niemand scheint die welche Funktion aufgenommen zu haben. Es kann sich auch zum Filtern als nützlich erweisen.
Dadurch werden auch NAs behandelt und aus dem resultierenden Datenrahmen entfernt.
Wenn dies 50000 Mal auf einem 9840 x 24-Datenrahmen ausgeführt wird, scheint die Methode 60% schneller zu laufen als die Methode% in%.
quelle
Ich habe an einem Datenrahmen gearbeitet und hatte kein Glück mit den bereitgestellten Antworten. Er gab immer 0 Zeilen zurück, also habe ich grepl gefunden und verwendet:
Dadurch wurde mein Datenrahmen im Grunde nur auf die Zeilen gekürzt, die "Downlink" in der Spalte "Übertragungsrichtung" enthielten. PS Wenn jemand erraten kann, warum ich das erwartete Verhalten nicht sehe, hinterlasse bitte einen Kommentar.
Speziell zur ursprünglichen Frage:
quelle
Manchmal wird die zu filternde Spalte an einer anderen Position als der Spaltenindex 2 angezeigt oder hat einen Variablennamen.
In diesem Fall können Sie den zu filternden Spaltennamen einfach wie folgt referenzieren :
quelle
NA
Datensätze erfasst! Daher nicht anwendbar.Wir können die Bibliothek data.table verwenden
oder filtern Sie mit dem
%like%
Operator für den Mustervergleichquelle
Das hat für mich wie Magie funktioniert.
celltype_hesc_bool = expr['cell_type'] == 'hesc'
expr_celltype_hesc = expr[celltype_hesc]
Überprüfen Sie diesen Blog-Beitrag
quelle