dplyrと を使用して、大規模なデータセットからいくつかの観測をフィルタリングする方法を考え出そうとしていますgrepl。grepl他のソリューションがより最適である場合、私は に夢中ではありません。
このサンプル df を使用します。
df1 <- data.frame(fruit=c("apple", "orange", "xapple", "xorange",
"applexx", "orangexx", "banxana", "appxxle"), group=c("A", "B") )
df1
# fruit group
#1 apple A
#2 orange B
#3 xapple A
#4 xorange B
#5 applexx A
#6 orangexx B
#7 banxana A
#8 appxxle B
したい:
- 「x」で始まるケースを除外します
- 「xx」で終わるケースを除外します
「x」または「xx」を含むが、先頭または末尾ではないすべてのものを取り除く方法をなんとか見つけました。'xx' で終わるだけでなく、内部に 'xx' を含むすべてのものを取り除く方法は次のとおりです。
df1 %>% filter(!grepl("xx",fruit))
# fruit group
#1 apple A
#2 orange B
#3 xapple A
#4 xorange B
#5 banxana A
これは明らかに「誤って」(私の観点からは)「appxxle」をフィルタリングしました。
私は正規表現を完全に理解したことがありません。次のようなコードを変更しようとしてきましたが grepl("^(?!x).*$", df1$fruit, perl = TRUE) 、フィルターコマンド内で機能するようにしようとしましたが、うまくいきません。
期待される出力:
# fruit group
#1 apple A
#2 orange B
#3 banxana A
#4 appxxle B
dplyrできれば 室内でやりたいです。