当字符串作为 R 中的逗号时,字符串匹配列中的精确值
string matching for exact value in a column when a string as a comma in R
我想找到给定查询的精确匹配项(下面的示例是查询 'ABC'。但是我想要所有带有 ABC 的行,或者是否用逗号分隔。这意味着我想要以下所需的输出。
示例数据:
query = c('ABC')
col1 = c("ABC", "DEF", "ABCDE", "DAC", "CBA,ABC,LMN1")
col2 = c("DEF", "EQ", "AC", "DE,ABC", "QSX")
col3 = c(12, 30, NA, 0, 54)
df = data.frame(col1, col2, col3)
期望输出:
col1 col2 col3
1 ABC DEF 12
4 DAC DE,ABC 0
5 CBA,ABC,LMN1 QSX 54
我已尝试使用 grepl
,但我得到以下信息(请参阅标记为 3 的行)。
df[with(df, grepl(query, col1)|grepl(query, col2)),]
我的输出(不需要):
col1 col2 col3
1 ABC DEF 12
3 ABCDE AC NA
4 DAC DE,ABC 0
5 CBA,ABC,LMN1 QSX 54
确保获得所需行的最佳方法是什么?
我们需要 'query' 中的单词边界。遍历列,将 grepl
、Reduce
应用到单个逻辑 vector
和 |
,使用它来子集行
queryN <- paste0("\b", query, "\b")
df[Reduce(`|`, lapply(df[1:2], grepl, pattern = queryN)),]
# col1 col2 col3
#1 ABC DEF 12
#4 DAC DE,ABC 0
#5 CBA,ABC,LMN1 QSX 54
或者使用OP的方法
df[with(df, grepl(queryN, col1)|grepl(queryN, col2)),]
我想找到给定查询的精确匹配项(下面的示例是查询 'ABC'。但是我想要所有带有 ABC 的行,或者是否用逗号分隔。这意味着我想要以下所需的输出。
示例数据:
query = c('ABC')
col1 = c("ABC", "DEF", "ABCDE", "DAC", "CBA,ABC,LMN1")
col2 = c("DEF", "EQ", "AC", "DE,ABC", "QSX")
col3 = c(12, 30, NA, 0, 54)
df = data.frame(col1, col2, col3)
期望输出:
col1 col2 col3
1 ABC DEF 12
4 DAC DE,ABC 0
5 CBA,ABC,LMN1 QSX 54
我已尝试使用 grepl
,但我得到以下信息(请参阅标记为 3 的行)。
df[with(df, grepl(query, col1)|grepl(query, col2)),]
我的输出(不需要):
col1 col2 col3
1 ABC DEF 12
3 ABCDE AC NA
4 DAC DE,ABC 0
5 CBA,ABC,LMN1 QSX 54
确保获得所需行的最佳方法是什么?
我们需要 'query' 中的单词边界。遍历列,将 grepl
、Reduce
应用到单个逻辑 vector
和 |
,使用它来子集行
queryN <- paste0("\b", query, "\b")
df[Reduce(`|`, lapply(df[1:2], grepl, pattern = queryN)),]
# col1 col2 col3
#1 ABC DEF 12
#4 DAC DE,ABC 0
#5 CBA,ABC,LMN1 QSX 54
或者使用OP的方法
df[with(df, grepl(queryN, col1)|grepl(queryN, col2)),]