2016-09-29 3 views
0

ich mit einem Datenrahmen zu tun habe, die zwei Spalte mit den folgenden Werten enthältr Grepl und Filterdatenrahmen

Col1  Col2 
    10  How to; bus; car; 
    11  How to; 
    12  How to 
    13  How to; bus 
    14  How to; car 

Was ich versuche, die Datenrahmen, so dass nur die Zeilen zu tun ist, filtern, die Werte wie How to oder How to; enthalten wird beibehalten und Ruhe wird verworfen. Also sollte der endgültige Datenrahmen wie folgt aussehen:

Col1  Col2 
    11  How to; 
    12  How to 

Das habe ich ausprobiert.

filter(df, grepl('How to;|How to', Col2)) 

Dies funktioniert nicht, es zeigt den gesamten Datenrahmen. Ich bin mir nicht sicher, wo ich falsch liege. Jede Hilfe wird sehr geschätzt.

+3

sollten Sie versuchen, einen End-of-Line-Anker '$' zu jedem der Muster hinzuzufügen – rawr

+1

Verwenden Sie Regex nicht für exakte Übereinstimmungen. Sie könnten einfach 'filter (df, Col2 ==" How to; "| Col2 ==" How to ")' oder nicht dplyr überhaupt verwenden und Base R wie in 'df [with (df, Col2 == "How to;" | Col2 == "How to"),] 'oder' Teilmenge (df, Col2 == "How to;" | Col2 == "How to") '. Übrigens sollten Sie immer die Pakete erwähnen, die Sie verwenden: –

+0

'df%>% filter (grepl ('How to; $ $, Col2))' oder 'df [grepl (' How to; $ $, df $ Col2),] ' – alistaire

Antwort

1

Ich denke, die Kommentare haben eine angemessene Antwort gegeben, aber ich dachte, ich würde Ihnen eine Antwort näher an Ihre ursprüngliche Frage geben.

df %>% filter(!(grepl('bus', .$Col2) | grepl('car', .$Col2))) 

Beachten Sie die verschiedenen Unterschiede. Zuerst erscheint in Ihrem Beispiel der Operator oder | innerhalb des Musters. Dieser Mittelwert R ist buchstäblich auf der Suche nach 'How to;|How to' nicht 'How to;' oder 'How to'. Zweiter Hinweis, wie ich .$ an den Spaltennamen anhänge. Bei Verwendung von dplyr ist die . Abkürzung für die Daten, die Sie übergeben haben. Daher hätte df$Col2 auch funktioniert. Sie benötigen dies, weil Sie das Argument in eine base R-Funktion und nicht eine dplyr-Funktion übergeben. Schließlich hätte der Code df %>% filter((grepl('How to', .$Col2) | grepl('How to:', .$Col2))) nicht funktioniert, denn grepl findet keine genauen Übereinstimmungen. Stattdessen findet es Instanzen, die das Muster enthalten. Sie können exakte Übereinstimmung finden, aber Sie müssen Regex-Metazeichen verwenden. Daher würde df %>% filter((grepl('How to', .$Col2) | grepl('How to:', .$Col2))) den gesamten Datensatz, d. H. Ihre aktuelle Ausgabe, zurückgeben.

+0

danke Jacob, ich werde das auch versuchen. –

Verwandte Themen