【问题标题】:Selecting multiple rows based on data containing string in list [duplicate]根据列表中包含字符串的数据选择多行[重复]
【发布时间】:2020-08-19 05:51:22
【问题描述】:

我有一个数据框 df,其中包含一列文本字符串和一个单独的值列表:

c1 <- c("Jim Mackinnon","Jane Smit","Sunday 9-10","Wednesday 14-15","Friday 19-20")
c2 <- c("1123","4923","6924","4301","5023")
df <- as.data.frame(c2,c1)
df
           c1     c2
Jim Mackinnon   1123
Jane Smit       4923
Sunday 9-10     6924
Wednesday 14-15 4301
Friday 19-20    5023

list_values <- c("Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday")

目的是只选择那些包含 c1 中的值的行,该值包含 list_values 中的字符串之一。在示例中,这意味着仅选择第 3-5 行并丢弃其余行。有没有不迭代的方法?

【问题讨论】:

    标签: r dataframe select


    【解决方案1】:

    您可以将所有list_values 粘贴到一个字符串中,然后使用grepl 查找行

    subset(df,grepl(paste0(list_values, collapse = "|"), rownames(df)))
    

    请注意,您使用了as.data.frame,它使c1 作为行名。如果您的实际意思是使用data.frame,那么您可以这样做:

    df <- data.frame(c2,c1)
    
    subset(df,grepl(paste0(list_values, collapse = "|"), c1))
    
    #    c2              c1
    #3 6924     Sunday 9-10
    #4 4301 Wednesday 14-15
    #5 5023    Friday 19-20
    

    您也可以将其与tidyverse 函数一起使用:

    library(dplyr)  
    library(stringr)
    
    df %>% filter(str_detect(c1, str_c(list_values, collapse = "|")))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-01-19
      • 2019-03-15
      • 2020-11-21
      • 1970-01-01
      • 1970-01-01
      • 2017-09-24
      • 2015-07-16
      相关资源
      最近更新 更多