首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >根据列表中包含字符串的数据选择多行

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

Stack Overflow用户
提问于 2020-08-19 05:51:22
回答 1查看 1.1K关注 0票数 0

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

代码语言:javascript
运行
复制
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行并丢弃其余的行。有没有一种不用迭代就能做到这一点的方法?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-08-19 05:55:44

可以将所有list_values粘贴在一个字符串中,并使用grepl查找行。

代码语言:javascript
运行
复制
subset(df,grepl(paste0(list_values, collapse = "|"), rownames(df)))

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

代码语言:javascript
运行
复制
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函数一起使用:

代码语言:javascript
运行
复制
library(dplyr)  
library(stringr)

df %>% filter(str_detect(c1, str_c(list_values, collapse = "|")))
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63480767

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档