【发布时间】:2020-09-19 14:46:51
【问题描述】:
我正在尝试将 R Shiny 下拉菜单(选择多个值)中的字符串(或字符串列表)与数据表特定列中的数据进行匹配。
详情:
-
var_to_plot()是在 R Shiny UI 的下拉菜单中选择的字符串列表(如果只选择了一个值,则为单个字符串)。它返回例如Var1 -
df$Relevant_Column中我希望它匹配的行中的数据如下所示: Test1_Var1, Test2_Var1, Test2_Var2- 我想同时过滤
Var1和Var2。 - 使用 Grepl 时仅选择 1 个有效,在下面的代码中,但不是两个,因为我收到警告:“在 grep(var_to_plot(), df$Relevant_Column) 中出现警告: 参数 'pattern' 的长度 > 1,并且只会使用第一个元素d"
- 即它只过滤列表中的第一个字符串,而不是全部。
- 所以我尝试使用
sqldf,但没有成功,如下所示。
我尝试了以下方法:
-
使用 Grepl(返回警告):
df[grepl(var_to_plot(), df$Relevant_Column), ]
-
使用 SQLDF(返回空 DF,因为某些原因它与 var_to_plot() 不匹配)
df = sqldf("SELECT * FROM df WHERE Relevant_Column LIKE '%var_to_plot()%'")
【问题讨论】:
-
如果没有可重复的示例,很难给出具体建议,但您可以尝试类似
df[stringr::str_detect(df$Relevant_Column, stringr::str_c(var_to_plot(), collapse = "|")), ]的方法。此代码假设您将 'var_to_plot()' 强制转换为字符向量。 -
效果很好。谢谢!随意提供它作为答案,我会接受。
-
我很高兴它成功了!我发布了一个答案,还添加了基本 R 和 data.table 选项。
标签: r dataframe datatable sqldf grepl