R 检查子字符串是否出现在单独的列中

R 检查子字符串是否出现在单独的列中,r,substring,string-matching,R,Substring,String Matching,我需要检查我的数据是否包含基准研究没有的名称。 我的问题是我的名字被截断了,所以通常是基准测试研究报告的名字的子串 例如,我的数据的截断版本: Benchmark `My Data` Southern Corp Avista American Electric Power Atmos Atmos Energy Southern Delta Natural Gas Co Inc DU

我需要检查我的数据是否包含基准研究没有的名称。 我的问题是我的名字被截断了,所以通常是基准测试研究报告的名字的子串

例如,我的数据的截断版本:

      Benchmark             `My Data`
Southern Corp                Avista
American Electric Power      Atmos
Atmos Energy                 Southern
Delta Natural Gas Co Inc     DUET
Avista Corp                  Duke Energy
Duke Energy Corp             American Electric
Pepco Holdings               Nextra Energy
例如,您可以看到,在“我的数据”中,名称报告为“南方”,但在基准测试中,名称报告为“南方公司”,类似地,我的数据将“杜克能源”报告为“杜克能源公司”

我需要找出我的数据集是否包含基准测试集没有的名称

因此,我需要一个标志或助手列,告诉我我的数据集包括“Nextra Energy”,但基准测试没有

我希望输出如下:

    Benchmark               `My Data`            Not in Benchmark
Southern Corp                Avista                      0
American Electric Power      Atmos                       0
Atmos Energy                 Southern                    0
Delta Natural Gas Co Inc     DUET                        1
Avista Corp                  Duke Energy                 0
Duke Energy Corp             American Electric           0
Pepco Holdings               Nextra Energy               1 

谢谢

dat$flag
dat$flag漂亮!您使用了这样一个事实,数据列中的条目总是更小,并且包含我在基准列中查找的子字符串,对吗?我以前也没见过这样使用()的。谢谢是的。由于我们对
基准的每个元素
数据的每个元素
都会得到一个正确或错误的结果,因此只要至少有1个匹配项,我们就可以使用
任意
使结果为真(因此为0)。很乐意帮忙。我想知道,考虑到大写字母的差异,是否可以对该代码进行任何调整。例如,我将您的建议应用到我的数据中,除了在数据列中有“Nisoft”这样的名称,在基准列中有“Nisoft”这样的名称外,效果非常好。我想知道我该如何应用一些基于正则表达式的修复程序来解决这个问题?仅供参考,我通过将所有内容简化来解决上述问题。很好!您使用了这样一个事实,数据列中的条目总是更小,并且包含我在基准列中查找的子字符串,对吗?我以前也没见过这样使用()的。谢谢是的。由于我们对
基准的每个元素
数据的每个元素
都会得到一个正确或错误的结果,因此只要至少有1个匹配项,我们就可以使用
任意
使结果为真(因此为0)。很乐意帮忙。我想知道,考虑到大写字母的差异,是否可以对该代码进行任何调整。例如,我将您的建议应用到我的数据中,除了在数据列中有“Nisoft”这样的名称,在基准列中有“Nisoft”这样的名称外,效果非常好。我想知道我该如何应用一些基于正则表达式的修复程序来解决这个问题?仅供参考,我通过将所有内容简化来解决上述问题。
dat$flag <- NA
for(i in 1:nrow(dat)){
  if(any(grepl(dat$Data[i],dat$Benchmark))){
    dat$flag[i] <- 0
  } else{
    dat$flag[i] <- 1
  }
}

dat
                 Benchmark              Data flag
1            Southern Corp            Avista    0
2  American Electric Power             Atmos    0
3             Atmos Energy          Southern    0
4 Delta Natural Gas Co Inc              DUET    1
5              Avista Corp       Duke Energy    0
6         Duke Energy Corp American Electric    0
7           Pepco Holdings     Nextra Energy    1