【问题标题】:R- character keyword exact search to dataframeR-字符关键字精确搜索到数据框
【发布时间】:2018-10-04 15:55:09
【问题描述】:

输入:

a <- c('a,a b,a b c,a b c d')

就像字符的第一个单词,即只是“a” grep(搜索功能)到另一个数据帧,即

df <- data.frame(rbind(c('a',1,'ewew'),c('a b c',101,'dffdhsd')))

并在数据框中输出:

a,a b c

【问题讨论】:

  • 不清楚输出。你需要df[sapply(df, function(x) any(x %in% unlist(strsplit(a, ","))))]
  • 不清楚输出。
  • 无法获得输出.. 我的意思是我有 1 个字符向量和 1 个数据框作为输入,如果匹配,我会将字符向量中的每个关键字搜索到特定列中,我存储匹配的单词。 a

标签: r dataframe search keyword-search


【解决方案1】:

我不清楚这是否是你的目标,但你可以试试:

> ind <- apply(df, 1:2, function(x) x %in% strsplit(a, ",")[[1]])
> df[ind]
[1] "a"     "a b c"

【讨论】:

  • 无法获得输出.. 我的意思是我有 1 个字符向量和 1 个数据框作为输入,如果匹配,我会将字符向量中的每个关键字搜索到特定列中,我存储匹配的单词。 a
【解决方案2】:

我们将 'a' 通过 ',' 拆分为 vector 并检查列的 any 是否具有这些元素以创建用于子集列的逻辑向量

v1 <- unlist(strsplit(a, ","))
df[, sapply(df, function(x) any(x %in% v1))]
#[1] a     a b c
#Levels: a a b c

如果我们需要使用grep,请将'a'中的,替换为|,并将其用作pattern

pat <- gsub(",", "|", a)

或者

pat <- chartr(",", "|", a)
df[, colSums(sapply(df, grepl, pattern = pat)) > 1]

【讨论】:

  • 无法获得输出.. 我的意思是我有 1 个字符向量和 1 个数据框作为输入,如果匹配,我会将字符向量中的每个关键字搜索到特定列中,我存储匹配的单词。 a
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-23
  • 2018-02-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多