如何根据子字符串匹配选择R data.table行(一个SQL类似)
问题描述:
我有一个data.table与一个字符列,并且只想选择那些包含子字符串的行。相当于SQL WHERE x LIKE '%substring%'
如何根据子字符串匹配选择R data.table行(一个SQL类似)
E.g.
> 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
有没有一种方法可以使用这个命令并更新没有'
@RafaelPereira你看了看' ?data.table'(示例),阅读文档并参加DataCamp课程? '月[像(名称,“MB”),someCol:= someValue]' –
谢谢你的建议@马特 - 道尔。也许我还不够清楚。 [我的意思是问你这个](http://*.com/questions/32882768/subset-data-table-without-using)。 –