Ich möchte Zeilen aus einem Datenrahmen basierend auf der teilweisen Übereinstimmung einer Zeichenfolge in einer Spalte auswählen, z. B. enthält die Spalte 'x' die Zeichenfolge "hsa". Mit sqldf
- wenn es eine like
Syntax hätte - würde ich etwas tun wie:
select * from <> where x like 'hsa'
.
sqldf
Unterstützt diese Syntax leider nicht.
Oder ähnlich:
selectedRows <- df[ , df$x %like% "hsa-"]
Was natürlich nicht funktioniert.
Kann mir bitte jemand dabei helfen?
dput(head(conservedData))
.Antworten:
Ich stelle fest, dass Sie
%like%
in Ihrem aktuellen Ansatz eine Funktion erwähnen . Ich weiß nicht, ob das ein Verweis auf die%like%
von "data.table" ist, aber wenn ja, können Sie sie definitiv wie folgt verwenden.Beachten Sie, dass das Objekt kein a sein muss
data.table
(aber denken Sie auch daran, dass Teilmengenansätze fürdata.frame
s unddata.table
s nicht identisch sind):Wenn Sie das hatten, hatten Sie vielleicht gerade die Zeilen- und Spaltenpositionen für die Teilmenge der Daten vertauscht.
Wenn Sie kein Paket laden möchten, können Sie versuchen,
grep()
nach der Zeichenfolge zu suchen, mit der Sie übereinstimmen. Hier ist ein Beispiel mit demmtcars
Datensatz, in dem alle Zeilen abgeglichen werden, in denen der Zeilenname "Merc" enthält:Ein weiteres Beispiel
iris
für die Verwendung des Datensatzes, der nach der Zeichenfolge suchtosa
:Versuchen Sie für Ihr Problem:
quelle
grep
Sie auch, dass reguläre Ausdrücke unterstützt werden, sodass Sie^hsa-
stattdessen nach grep suchen möchten .grep
kommt tatsächlich aus dem ed-Befehl g / re / p (global / regulärer Ausdruck / Druck) und offenbart seine wahre Kraft nur dem Meister des regulären Ausdrucks-fu ;-): en.wikipedia.org/ Wiki / GrepVersuchen Sie es mit
str_detect()
dem stringr- Paket, das das Vorhandensein oder Fehlen eines Musters in einem String erkennt.Hier ist ein Ansatz, der auch die
%>%
Pipe undfilter()
das dplyr- Paket enthält:Dies filtert den CO2-Probendatensatz (der mit R geliefert wird) nach Zeilen, in denen die Behandlungsvariable den Teilstring "non" enthält. Sie können anpassen, ob
str_detect
feste Übereinstimmungen gefunden werden oder ein regulärer Ausdruck verwendet wird - siehe Dokumentation zum stringr-Paket.quelle
myDataFrame[str_detect(myDataFrame$key, myKeyPattern),]
LIKE
sollte in SQLite funktionieren:quelle
require()
hierrequire
Funktion laden müssen.