Cor*_*one 47 r string-matching data.table
我有一个带有字符列的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
Run Code Online (Sandbox Code Playgroud)
我如何只选择Name包含"mb"的行?
Mat*_*wle 83
data.table
有like
功能.
Months[like(Name,"mb")]
Name Number
1: September 9
2: November 11
3: December 12
Run Code Online (Sandbox Code Playgroud)
或者,%like%
看起来更好:
> Months[Name %like% "mb"]
Name Number
1: September 9
2: November 11
3: December 12
Run Code Online (Sandbox Code Playgroud)
注意%like%
并like()
使用grepl
(返回逻辑向量)而不是grep
(返回整数位置).这样就可以与其他逻辑条件结合起来:
> Months[Number<12 & Name %like% "mb"]
Name Number
1: September 9
2: November 11
Run Code Online (Sandbox Code Playgroud)
而且你也可以获得正则表达式搜索(不仅仅是%或*通配符)的强大功能.
运算符%in%
不进行部分字符串匹配,它用于查找值是否存在于另一组值中,即"a" %in% c("a","b","c")
要进行部分字符串匹配,您需要使用该grep()
函数.您可以使用它grep
来返回其中所有列的索引"mb"
.然后按该索引对行进行子集化
Months[grep("mb", Name)] # data.table syntax slightly easier
Run Code Online (Sandbox Code Playgroud)