2013-01-31 46 views

回答

72

data.table具有like功能子集的行。

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

或者,%like%看起來更好:

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

注意%like%like()使用grepl(返回邏輯向量),而不是grep(返回整數位置)。這是因此它可以與其它邏輯條件進行組合:

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

,你會得到正則表達式搜索的力量(而不僅僅是%或*通配符),太。

+0

有沒有一種方法可以使用這個命令並更新沒有'<-'的表格,我在想''Months [Name == like(Name,「mb」),'' –

+0

@RafaelPereira你看了看' ?data.table'(示例),閱讀文檔並參加DataCamp課程? '月[像(名稱,「MB」),someCol:= someValue]' –

+0

謝謝你的建議@馬特 - 道爾。也許我還不夠清楚。 [我的意思是問你這個](http://stackoverflow.com/questions/32882768/subset-data-table-without-using)。 –

7

運營商%in%沒有做局部字符串匹配 它用於發現如果另一組值的存在價值即"a" %in% c("a","b","c")

要做到局部字符串匹配,你需要使用grep()功能。 您可以使用grep返回其中包含"mb"的所有列的索引。然後,通過該索引

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

非常感謝,事實上''月[grep(「mb」,Name)]'似乎工作。 – Corone

+0

只有在您的工作區的其他位置將Name定義爲單獨的矢量時,才能使用該功能。小心你正在使用的變量 – LostLin

+1

這不正是工作,因爲這是一個data.table與data.frame? – Corone