【问题标题】:How to select R data.table rows based on substring match (a la SQL like)如何根据子字符串匹配选择 R data.table 行(类似于 SQL)
【发布时间】:2013-01-15 19:45:16
【问题描述】:

我有一个带有字符列的 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

如何只选择 Name 包含“mb”的行?

【问题讨论】:

    标签: r data.table string-matching


    【解决方案1】:

    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
    

    您还可以使用正则表达式搜索(不仅仅是 % 或 * 通配符)。

    【讨论】:

    • 有没有办法使用此命令并在没有 &lt;- 的情况下更新表格,我在想类似 Months[ Name== like(Name, "mb") ,] 的东西
    • @RafaelPereira 您看过?data.table(示例)、阅读文档并参加过DataCamp 课程吗? Months[like(Name,"mb"), someCol:=someValue]
    • 感谢@Matt-Dowle 的建议。也许我不够清楚。 I meant to ask you this.
    • @RafaelPereira 我明白了,是的。正如弗兰克现在指出的那样,我也想要这个功能:stackoverflow.com/a/10791729/403310
    • 你能用它来搜索多个字符串吗?
    【解决方案2】:

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

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

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

    【讨论】:

    • 非常感谢,事实上Months[grep("mb", Name)] 似乎有效。
    • 只有当您在工作区的其他地方将 Name 定义为单独的向量时,这才应该有效。注意你正在使用哪些变量
    • 这不只是因为这是一个 data.table vs data.frame 吗?
    • 那么,我们如何保存实际的行?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-11-24
    • 1970-01-01
    • 2019-01-15
    • 1970-01-01
    • 1970-01-01
    • 2022-11-03
    相关资源
    最近更新 更多