R 数据中的部分字符串匹配 Table
Partial String Match in R Data Table
我正在尝试将 R Shiny 下拉菜单(选择了多个值)中的字符串(或字符串列表)与数据的特定列中的数据进行匹配-table.
详情:
var_to_plot()
是在 R Shiny UI 的下拉菜单中选择的字符串列表(如果只选择一个值,则为单个字符串)。它 returns 例如Var1
- 我希望它匹配的
df$Relevant_Column
行中的数据看起来像:
Test1_Var1, Test2_Var1, Test2_Var2
- 我想过滤
Var1
和 Var2
。
- 在下面的代码中使用 Grepl 时只选择 1 个,但不是两个,因为我收到警告:“grep(var_to_plot(), df$[=59 中的警告=]) :
参数 'pattern' 的长度 > 1,并且只有第一个元素将被使用 d"
- 即它只过滤列表中的第一个字符串,而不是所有字符串。
- 所以我尝试使用
sqldf
,但没有成功,如下所示。
我试过以下方法:
使用 Grepl(returns 警告):
df[grepl(var_to_plot(), df$Relevant_Column), ]
使用 SQLDF(returns 空 DF 因为某些原因它不会与 var_to_plot() 匹配)
df = sqldf("SELECT * FROM df WHERE Relevant_Column LIKE '%var_to_plot()%'")
您可能希望将搜索词连接成一个有效的正则表达式,方法是用竖线分隔它们。
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)]
我正在尝试将 R Shiny 下拉菜单(选择了多个值)中的字符串(或字符串列表)与数据的特定列中的数据进行匹配-table.
详情:
var_to_plot()
是在 R Shiny UI 的下拉菜单中选择的字符串列表(如果只选择一个值,则为单个字符串)。它 returns 例如Var1
- 我希望它匹配的
df$Relevant_Column
行中的数据看起来像: Test1_Var1, Test2_Var1, Test2_Var2
- 我想过滤
Var1
和Var2
。 - 在下面的代码中使用 Grepl 时只选择 1 个,但不是两个,因为我收到警告:“grep(var_to_plot(), df$[=59 中的警告=]) : 参数 'pattern' 的长度 > 1,并且只有第一个元素将被使用 d"
- 即它只过滤列表中的第一个字符串,而不是所有字符串。
- 所以我尝试使用
sqldf
,但没有成功,如下所示。
我试过以下方法:
使用 Grepl(returns 警告):
df[grepl(var_to_plot(), df$Relevant_Column), ]
使用 SQLDF(returns 空 DF 因为某些原因它不会与 var_to_plot() 匹配)
df = sqldf("SELECT * FROM df WHERE Relevant_Column LIKE '%var_to_plot()%'")
您可能希望将搜索词连接成一个有效的正则表达式,方法是用竖线分隔它们。
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)]