查找一列中存在的单词串的错误也存在于另一列中或不存在?

时间:2017-08-28 06:28:18

标签: r

我试图找出数据帧第一列中存在的字符串是否也存在于同一数据帧的另一列中?

col1 <- c("ISAACS INN",
  "THIZAS PLACE",
  "ZINIKO TAVERN",
  "HANJIS RESTAURANT",
  "ULTIMATE")

col2 <- c("ISAACS IS INN",
          "HER THIZAS ARE PLACE",
          "HIS ZINIKO NAME TAVERN SO",
          "HANJIS SWEET HEIR RESTAURANT",
          "THIS IS ULTIMATE NAME")

df <- data.frame(col1, col2, stringsAsFactors=F)

我跟着这个试图找到答案:

testdf <- as.data.frame(transform(df, 
                                  word_exists = mapply(grepl, pattern=df$col1, 
                                                       x=df$col2) & nzchar(df$col1)))

哪次没能归还我正在寻找的东西。

我在上面的代码中做错了什么?

有替代品吗?

我得到的结果:

enter image description here

2 个答案:

答案 0 :(得分:1)

这是你在找什么?

lapply(df$col1, function(x) grepl(paste(strsplit(x,' ')[[1]], collapse='.*'), df$col2))

我刚刚将df$col1中的每一行更改为正则表达式,这两个单词之间可以包含任何内容(.*)。

答案 1 :(得分:1)

如果您正在尝试查找各个部分,这里有一个hackish tidyverse替代方案:

df %>%
  mutate(id = col1) %>%
  separate_rows(col1, sep =" ") %>%
  rowwise() %>%
  mutate( flg = if_else(grepl(col1,col2), 1, 0)) %>%
  group_by(id) %>%
  mutate(word_exists = prod(flg)) %>%
  ungroup() %>%
  select(col1 = id, col2, word_exists) %>%
  unique()

它将pattern拆分为单独的行,并检查每个组件。然后给出一个肯定的结果,pattern的所有部分都给出了积极的结果。

输出:

               col1                         col2 word_exists
              <chr>                        <chr>       <dbl>
1        ISAACS INN                ISAACS IS INN           1
2      THIZAS PLACE         HER THIZAS ARE PLACE           1
3     ZINIKO TAVERN    HIS ZINIKO NAME TAVERN SO           1
4 HANJIS RESTAURANT HANJIS SWEET HEIR RESTAURANT           1
5          ULTIMATE        THIS IS ULTIMATE NAME           1