Jak wybrać dane R.wiersze tabeli oparte na dopasowaniu podłańcucha (a la SQL like)
Mam dane.tabela z kolumną znakową i chce wybrać tylko te wiersze, które zawierają podłańcuch w niej. Odpowiednik SQL WHERE x LIKE '%substring%'
Np.
> Months = data.table(Name = month.name, Number = 1:12)
> Months["mb" %in% Name]
Empty data.table (0 rows) of 2 cols: Name,Number
Jak wybrać tylko wiersze, w których nazwa zawiera "mb"?
2 answers
data.table
posiada funkcję {[4] }.
Months[like(Name,"mb")]
Name Number
1: September 9
2: November 11
3: December 12
Lub, %like%
wygląda ładniej:
> Months[Name %like% "mb"]
Name Number
1: September 9
2: November 11
3: December 12
Zauważ, że %like%
i like()
używają grepl
(zwraca wektor logiczny) zamiast grep
(zwraca miejsca całkowite). Dlatego można go łączyć z innymi warunkami logicznymi:
> Months[Number<12 & Name %like% "mb"]
Name Number
1: September 9
2: November 11
I otrzymujesz moc wyszukiwania wyrażeń regularnych (nie tylko % lub * wildcard).
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-01-31 16:56:07
Operator %in%
nie wykonuje częściowego dopasowania ciągu znaków
jest on używany do znajdowania, czy wartości istnieją w innym zbiorze wartości tj. "a" %in% c("a","b","c")
Do częściowego dopasowania łańcuchów należy użyć funkcji grep()
.
Możesz użyć grep
, aby zwrócić indeks wszystkich kolumn z "mb"
. Następnie podgrupuj wiersze według tego indeksu
Months[grep("mb", Name)] # data.table syntax slightly easier
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-01-31 16:39:50