Je n'arrive pas à mettre mes données en place. Je veux que les données soient définies dans la colonne x, où les trois premiers caractères commencent par G45.
Mon cadre de données:
x <- c("G448", "G459", "G479", "G406")
y <- c(1:4)
My.Data <- data.frame (x,y)
J'ai essayé:
subset (My.Data, x=="G45*")
Mais je ne sais pas comment utiliser des caractères génériques. J'ai aussi essayé grep () pour trouver les indications:
grep ("G45*", My.Data$x)
mais il renvoie les 4 lignes plutôt que seulement celles commençant par G45, probablement aussi, car je ne sais pas comment utiliser les caractères génériques.
C'est assez simple d'utiliser [
pour extraire:
grep
vous indiquera la position dans laquelle il correspond à votre modèle de recherche (sauf si vous utilisez value = TRUE
).
grep("^G45", My.Data$x)
# [1] 2
Puisque vous effectuez une recherche dans les valeurs d'une seule colonne, cela correspond en fait à l'index de la ligne. Utilisez donc ceci avec [
(où vous utiliseriez My.Data[rows, cols]
pour obtenir des lignes et des colonnes spécifiques).
My.Data[grep("^G45", My.Data$x), ]
# x y
# 2 G459 2
La page d'aide pour subset
montre comment vous pouvez utiliser grep
et grepl
avec subset
si vous préférez utiliser cette fonction plutôt que [
. Voici un exemple.
subset(My.Data, grepl("^G45", My.Data$x))
# x y
# 2 G459 2
Depuis R 3.3, il y a maintenant aussi la fonction startsWith
, que vous pouvez à nouveau utiliser avec subset
(ou avec l’une des approches ci-dessus). Selon la page d’aide de la fonction, c’est beaucoup plus rapide que d’utiliser substring
ou grepl
.
subset(My.Data, startsWith(as.character(x), "G45"))
# x y
# 2 G459 2
Vous pouvez également utiliser le package stringr
library(dplyr)
library(stringr)
My.Data %>% filter(str_detect(x, '^G45'))
Vous ne pouvez pas utiliser '^'
(commence par) dans ce cas, pour obtenir les résultats dont vous avez besoin