【问题标题】:Using grep to select strings contained in a list使用 grep 选择列表中包含的字符串
【发布时间】:2014-05-31 08:30:46
【问题描述】:

我有一个数据框:

id  <- c(1:5)
name <- c("blackdog","whitedog", "blackcat","whitecat","greyrabbit")
df <- data.frame(id,name)
df

我还有一个列表供选择:

select <- c("black","dog","grey")

所以我想返回一个数据框,其中包含: 黑狗、黑猫、白狗、灰兔

我试过了:

dfselect <-df[grep(select,df[,2]),]
dfselect 

但这只是选择列表的第一个元素。

感谢您的帮助。

【问题讨论】:

    标签: regex r dataframe


    【解决方案1】:

    这里不需要使用循环:

    df[grep(paste(select,collapse='|'),df$name),]
    
    ## id       name
    ## 1  1   blackdog
    ## 2  2   whitedog
    ## 3  3   blackcat
    ## 5  5 greyrabbit
    

    【讨论】:

    • +1 - 我的第一个想法是插入“|”在列表中,但我无法让它轻松工作。我错过的是“崩溃”。谢谢!
    【解决方案2】:

    我认为你想要做的是使用 apply 函数:

    > df$name[unique(unlist(lapply(select, FUN=function(x) grep(x,df$name))))]
    [1] blackdog   blackcat   whitedog   greyrabbit
    Levels: blackcat blackdog greyrabbit whitecat whitedog
    

    这就是你所追求的吗?

    【讨论】:

      猜你喜欢
      • 2016-02-11
      • 1970-01-01
      • 2021-01-14
      • 1970-01-01
      • 2012-05-07
      • 2013-07-10
      • 2021-01-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多