【问题标题】:subsetting data with rows that end in a certain string for a column in r [duplicate]用以特定字符串结尾的行对r中的列进行子集化[重复]
【发布时间】:2020-01-06 12:54:51
【问题描述】:

我想对名称以字符串 TRUST, LIMITED, INC., CO 结尾的数据进行子集化 数据是这样的

name            date
abc TRUST       2018-01-01
123 Foundation  1997-02-06
Tim LIMITED     2002-06-04
SA INC.         1968-12-28
Yu Co           2005-01-24
Coca Cola Ltd.  1980-05-30

我尝试了以下方法,但它不适用于多种情况

df[grepl(paste0(c("TRUST", "LIMITED", "INC", "CO"), collapse = "|"), df$name), ]

它也提取可口可乐公司行,但我不希望这样。

【问题讨论】:

标签: r string subset


【解决方案1】:

要查找以给定字符串结尾的名称,您必须在搜索字符串的末尾放置 $

df[grep("(TRUST|LIMITED|INC\\.|Co)$", df$name), ]
#         name       date
#1   abc TRUST 2018-01-01
#3 Tim LIMITED 2002-06-04
#4     SA INC. 1968-12-28
#5       Yu Co 2005-01-24

如果您正在寻找单词结尾的解决方案,您可以使用@akrun 已经提到的\\b

df[grep("(TRUST|LIMITED|INC\\.|Co)\\b", df$name), ]
#         name       date
#1   abc TRUST 2018-01-01
#3 Tim LIMITED 2002-06-04
#4     SA INC. 1968-12-28
#5       Yu Co 2005-01-24

【讨论】:

    【解决方案2】:

    我们需要单词边界 (\\b) 来避免任何非特定匹配。另外,如果我们也想匹配Co,请使用ignore.case = TRUE

    df[grepl(paste0("\\b(", paste(c("TRUST", "LIMITED", "INC", "CO"), 
                     collapse = "|"), ")\\b"), df$name, ignore.case = TRUE), ]
    #       name       date
    #1   abc TRUST 2018-01-01
    #3 Tim LIMITED 2002-06-04
    #4     SA INC. 1968-12-28
    #5       Yu Co 2005-01-24
    

    数据

    df <- structure(list(name = c("abc TRUST", "123 Foundation", "Tim LIMITED", 
    "SA INC.", "Yu Co", "Coca Cola Ltd."), date = c("2018-01-01", 
    "1997-02-06", "2002-06-04", "1968-12-28", "2005-01-24", "1980-05-30"
    )), class = "data.frame", row.names = c(NA, -6L))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-10-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多