R数据表中的部分字符串匹配

问题描述 投票:0回答:1

我试图将R Shiny下拉菜单中的一个字符串(或字符串列表)(选择多个值)与数据表中特定列的数据进行匹配。

详情如下。

  • var_to_plot() 是指在R Shiny用户界面的下拉菜单中所选择的字符串列表(或单个字符串,如果只选择一个值)。它返回例如 Var1
  • 数据表中的行中的数据。df$Relevant_Column 我想让它与之相匹配的是这样的,如
  • Test1_Var1, Test2_Var1, Test2_Var2
  • 我想同时过滤 Var1Var2.
  • 在下面的代码中,当使用Grepl时,只选择1个工作,但不是两个,因为我得到警告。"在grep(var_to_plot(), df$Relevant_Column)中警告:参数'pattern'的长度为> 1,只有第一个元素会被使用。d"
  • 即它只对列表中的第一个字符串进行过滤,而不是全部。
  • 所以我尝试使用 sqldf但没有成功,如下图所示。

我尝试了以下方法。

  1. 使用Grepl(返回警告)。

    df[grepl(var_to_plot(), df$Relevant_Column),]

  2. 使用SQLDF(由于某些原因,从var_to_plot()返回空DF)

    df = sqldf("SELECT * FROM df WHERE Relevant_Column LIKE '%var_to_plot()%'")

r dataframe datatable sqldf grepl
1个回答
1
投票

你可能会想把搜索词连成一个有效的regex,用竖条分隔它们。

df <- data.frame(
  rowid = 1:4,
  Relevant_Column = c("Test1_Var1", "Test2_Var1", "Test2_Var2", "Text3_Var3")
)

var_to_plot <- c("Var1", "Var2")

## Base R.
df[grepl(paste(var_to_plot, collapse = "|"), df$Relevant_Column), ]

## Tidyverse.
library("stringr")
library("dplyr")
filter(df, str_detect(Relevant_Column, str_c(var_to_plot, collapse = "|")))

## data.table
library("data.table")
DT <- as.data.table(df)
DT[grepl(paste(var_to_plot, collapse = "|"), Relevant_Column)]
© www.soinside.com 2019 - 2024. All rights reserved.