我有一个带有字符列的 data.table,并且只想选择那些包含子字符串的行。相当于 SQLWHERE 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
我如何只选择名称包含“mb”的行?
我有一个带有字符列的 data.table,并且只想选择那些包含子字符串的行。相当于 SQLWHERE 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
我如何只选择名称包含“mb”的行?
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
并且您也获得了正则表达式搜索的强大功能(不仅仅是 % 或 * 通配符)。
运算符%in%
不进行部分字符串匹配,它用于查找值是否存在于另一组值中,即"a" %in% c("a","b","c")
要进行部分字符串匹配,您需要使用该grep()
函数。您可以使用grep
来返回其中包含的所有列的索引"mb"
。然后按该索引对行进行子集化
Months[grep("mb", Name)] # data.table syntax slightly easier