Sto cercando di fare qualcosa apparentemente molto semplice. Vorrei inserire un frame dati in R usando il comando grepl() - o qualcosa di simile - su diverse frasi senza costruire un ciclo.Sottoinsieme basato sull'elenco di stringhe che utilizzano grepl()?
Per esempio, mi piacerebbe tirare fuori tutte le righe per chiunque di nome Bob o Maria:
## example data frame:
tmp = structure(list(Name = structure(c(6L, 8L, 9L, 7L, 2L, 3L, 10L,
1L, 5L, 4L), .Label = c("Alan", "Bob", "bob smith", "Frank",
"John", "Mary Anne", "mary jane", "Mary Smith", "Potter, Mary",
"smith, BOB"), class = "factor"), Age = c(31L, 23L, 23L, 55L,
32L, 36L, 45L, 12L, 43L, 46L), Height = 1:10), .Names = c("Name",
"Age", "Height"), class = "data.frame", row.names = c(NA, -10L
))
tmp
# Name Age Height
#1 Mary Anne 31 1
#2 Mary Smith 23 2
#3 Potter, Mary 23 3
#4 mary jane 55 4
#5 Bob 32 5
#6 bob smith 36 6
#7 smith, BOB 45 7
#8 Alan 12 8
#9 John 43 9
#10 Frank 46 10
## this doesn't work
mynames=c('bob','mary')
tmp[grepl(mynames,tmp$Name,ignore.case=T),]
Tutte le idee sarebbe utile!
si dovrebbe essere sempre un avvertimento nella console perché il 'famiglia grep' di funzioni richiede una stringa di caratteri singolo che specifica il modello (o una stringa fissa o un'espressione regolare). La documentazione in '? Grep' afferma," Se viene fornito un vettore di caratteri di lunghezza 2 o più, il primo elemento viene utilizzato con un avvertimento. " –