次のようなシンプルなデータフレームがあります。
_x <- c("aa", "aa", "aa", "bb", "cc", "cc", "cc")
y <- c(101, 102, 113, 201, 202, 344, 407)
df = data.frame(x, y)
x y
1 aa 101
2 aa 102
3 aa 113
4 bb 201
5 cc 202
6 cc 344
7 cc 407
_
Dplyr :: filter()とRegExを使用して、_1
_で始まるすべてのy
観測をフィルターで除外したい
コードは次のようになると思います:
_df %>%
filter(y != grep("^1"))
_
しかし、私はError in grep("^1") : argument "x" is missing, with no default
を取得しています
grepl
とfilter
のドキュメントを再確認する必要があります。
grep
/grepl
の場合は、チェックインするベクトル(この場合はy)も指定する必要があり、filter
は論理ベクトルを取ります(つまり、 grepl
)。 (grep
からの)インデックスベクトルを提供する場合は、代わりにslice
を使用できます。
df %>% filter(!grepl("^1", y))
または、grep
から派生したインデックスを使用:
df %>% slice(grep("^1", y, invert = TRUE))
ただし、最初の文字だけに関心があるため、substr
を使用することもできます。
df %>% filter(substr(y, 1, 1) != 1)
dplyr
とstringr
を組み合わせて(tidyverse内にとどまる)、次のようにできます。
df %>% filter(!str_detect(y, "^1"))
これは、str_detect
は論理ベクトルを返します。