2013-01-31 20 views

risposta

72

data.table ha una funzione like.

Months[like(Name,"mb")] 
     Name Number 
1: September  9 
2: November  11 
3: December  12 

Oppure, %like% sembra più bello:

> Months[Name %like% "mb"] 
    Name Number 
1: September  9 
2: November  11 
3: December  12 

noti che %like% e like() uso grepl (restituisce vettore logico) piuttosto che grep (posizioni restituisce interi). Questo è in modo che possa essere combinato con altre condizioni logiche:

> Months[Number<12 & Name %like% "mb"] 
     Name Number 
1: September  9 
2: November  11 

e si ottiene il potere di ricerca di espressioni regolari (non solo% o carattere jolly *), troppo.

+0

c'è un modo per usare questo comando e aggiornare la tabella senza '<-', stavo pensando in qualcosa come' Mesi [Nome == mi piace (Nome, "mb"),] ' –

+0

@RafaelPereira Hai guardato' ? data.table' (esempi), leggi la documentazione e segui il corso DataCamp? 'Mesi [like (Name," mb "), someCol: = someValue]' –

+0

Grazie per i suggerimenti @ Matt-Dowle. Forse non ero abbastanza chiaro. [Volevo chiederti questo] (http://stackoverflow.com/questions/32882768/subset-data-table-without-using). –

7

L'operatore %in% non fa stringa parziale corrispondenza viene utilizzata per individuare se esistono valori in un altro insieme di valori cioè "a" %in% c("a","b","c")

Per fare stringa parziale corrispondenza è necessario utilizzare la funzione grep(). È possibile utilizzare grep per restituire un indice di tutte le colonne con "mb" in esso. Poi sottoinsieme delle righe da tale indice

Months[grep("mb", Name)] # data.table syntax slightly easier 
+2

Grazie mille, infatti 'Mesi [grep (" mb ", Name)]' sembra funzionare. – Corone

+0

Questo dovrebbe funzionare solo se hai definito Nome come vettore separato da qualche altra parte nel tuo spazio di lavoro. Fai attenzione a quali variabili stai usando – LostLin

+1

Non funziona solo perché questo è un data.table vs data.frame? – Corone

Problemi correlati