我可能会以愚蠢的方式解决这个问题,但请耐心等待。我在selectizeInput
中使用shiny
,因此用户可以选择多个类别。这些选择用于对数据帧进行子集化。在尝试match
和pmatch
以及%in%
查找文字模式后,我决定使用grep
。当项目有多个类别时,它能够找到正确的行。 然而,模式参数的长度不能超过1.解决方法?在模式中的元素之间添加|
(或运算符)。我需要帮助,以便在向量的元素之间插入|
,以便在grep
时使用length(input$Category)>1
对数据帧进行子集化。
df <- data.frame(title = 1:5, category = c("ab", "bcd", "efg","ab,bcd","efg"))
cate <- c("bcd")
df[grep(cate,x = df$category),]
但是,如果有人要选择多个类别,grep
只使用模式中的第一个元素:
cate <- c("bcd","efg")
df[grep(cate,x = df$category),]
|
cate <- c("bcd|efg")
df[grep(cate,x = df$category),]
我无法弄清楚如何以编程方式在cate的元素之间添加|
而不会使if
语句变得非常混乱。
if(length(cate)== 1){
df[grep(cate,x = df$category),])
} else {
if(length(cate) == 2){
cate2 <- paste(cate[[1]],"|",cate[[2]], sep = "")
df[grep(cate2,x = df$category),]
} else {...
必须有一些方法来生成模式:
paste(cate[[1]],"|",cate[[2]],...,"|",cate[[n]], sep = "")
答案 0 :(得分:0)
我不是百分之百确定你正在做什么,因此不能指出你的“更好”的解决方案,但为了你的目的,我很确定这样做的一些事情会:
cate <- character()
cate[1] <- c("ab")
cate[2] <- c("efg")
cate[3] <- c("ab")
do.call(what = paste, c(list(cate), collapse = "|"))