如何根据子串匹配来selectR data.table行(一个像SQL一样)

我有一个字符列data.table,并希望只select那些包含一个子string的行。 等同于SQL WHERE x LIKE '%substring%'

例如

 > Months = data.table(Name = month.name, Number = 1:12) > Months["mb" %in% Name] Empty data.table (0 rows) of 2 cols: Name,Number 

我将如何select名称包含“MB”的行?

data.table有一个likefunction。

 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 

你也可以获得正则expression式search的力量(不仅仅是%或者*通配符)。

运算符%in%不做部分string匹配,用于查找是否存在另一组值中的值,即"a" %in% c("a","b","c")

要进行部分string匹配,您需要使用grep()函数。 你可以使用grep来返回所有包含"mb"列的索引。 然后按该索引对行进行分组

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