根据列表中包含字符串的数据选择多行

Ron*_*ald 0 select r dataframe

我有一个数据框 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")
Run Code Online (Sandbox Code Playgroud)

目的是仅选择包含 c1 中的值(该值包含 list_values 中的字符串之一)的行。在示例中,这意味着仅选择第 3-5 行并丢弃其余行。有没有一种方法可以在不迭代的情况下做到这一点?

Ron*_*hah 5

您可以将所有内容粘贴list_values到一个字符串中并用于grepl查找行

subset(df,grepl(paste0(list_values, collapse = "|"), rownames(df)))
Run Code Online (Sandbox Code Playgroud)

请注意,您使用了as.data.framewhich madec1作为行名。如果你真正的意思是使用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
Run Code Online (Sandbox Code Playgroud)

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

library(dplyr)  
library(stringr)

df %>% filter(str_detect(c1, str_c(list_values, collapse = "|")))
Run Code Online (Sandbox Code Playgroud)