J'ai une trame de données simple qui ressemble à ceci:
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
Je voudrais utiliser un dplyr :: filter () et un RegEx pour filtrer toutes les observations y
qui commencent par le nombre 1
J'imagine que le code ressemblera à quelque chose comme ceci:
df %>%
filter(y != grep("^1"))
Mais je reçois une Error in grep("^1") : argument "x" is missing, with no default
Vous devez vérifier les documentations pour grepl
et filter
.
Pour grep
/grepl
, vous devez également fournir le vecteur que vous souhaitez archiver (y dans ce cas) et filter
prend un vecteur logique (c'est-à-dire que vous devez utiliser grepl
). Si vous souhaitez fournir un vecteur d'index (à partir de grep
), vous pouvez utiliser slice
à la place.
df %>% filter(!grepl("^1", y))
Ou avec un index dérivé de grep
:
df %>% slice(grep("^1", y, invert = TRUE))
Mais vous pouvez aussi simplement utiliser substr
car vous n'êtes intéressé que par le premier caractère:
df %>% filter(substr(y, 1, 1) != 1)
Avec une combinaison de dplyr
et stringr
(pour rester dans le sens inverse), vous pourriez faire:
df %>% filter(!str_detect(y, "^1"))
Cela fonctionne parce que str_detect
renvoie un vecteur logique.