2013-01-31 25 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