如何根据子串匹配来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
有一个like
function。
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