我正在尝试过滤包含多个关键字的列(在此示例中为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
我很感激你的帮助。
答案 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>
答案 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, . ) )