筛选包含多个关键字的列

时间:2015-11-13 14:52:27

标签: r

我正在尝试过滤包含多个关键字的列(在此示例中为dog和cat)但我遇到了问题,因为只使用了第一个元素。

id <- c(1:7)
type <- c("dog1","dog2" ,"cat1","cat2","zebra1", "parrot5", "elephant15")
filter1 <- c("dog","cat")
df1 <- data.frame(id,type)
dfilter <- df1[grep(filter1,df1$type),]
dfilter

我很感激你的帮助。

5 个答案:

答案 0 :(得分:3)

grep可以使用|作为或者,为什么不将过滤器与|粘贴在一起作为分隔符:

dfilter <- df1[grep(paste0(filter1, collapse = "|"), df1$type),]

答案 1 :(得分:2)

试试这个:

dfilter <- df1[sapply(filter1, function(x) grep(x,df1$type)),]

它抱怨,因为你的过滤器是一个向量而grep需要一个字符串。

编辑:

来自this answer

dfilter <- df1[df1$type %in% grep(paste(filter1, collapse="|"), df1$type, value=TRUE), ]

答案 2 :(得分:2)

与提到的@Tgsmith61591一样,grep函数的pattern参数需要一个字符串。由于你传递了一个向量,它会警告你它只会处理第一个元素。

另一种解决方案是这样的:

<DataGridTextColumn  >
    <DataGridTextColumn.HeaderTemplate>
        <DataTemplate>
            <TextBlock Text="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Window}}, Path=DataContext.Text1}"></TextBlock>
        </DataTemplate>
    </DataGridTextColumn.HeaderTemplate>
</DataGridTextColumn>

请参阅此帖子grep using a character vector with multiple patterns

答案 3 :(得分:1)

df1[(gsub('\\d','',df1$type) %in% filter1),]
  id type
1  1 dog1
2  2 dog2
3  3 cat1
4  4 cat2

答案 4 :(得分:1)

这是一个dplyr方法:

library(stringi)
library(dplyr)

data = data_frame(
  id = c(1:7),
  type = c("dog1","dog2" ,"cat1","cat2","zebra1", "parrot5", "elephant15")
)


data %>%
  filter(animals %>%
           paste(collapse = "|") %>%
           stri_detect_regex(type, . ) )