2016-09-20 5 views
1

私のデータにベンチマーク研究ではない名前が含まれているかどうかを確認する必要があります。 私の問題は、私の名前が切り捨てられているため、一般的にはベンチマーク調査で報告された名前の部分文字列です。例えばサブストリングが別の列にあるかどうかをチェック

、私のデータの切り捨てられたバージョン:たとえば

 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 

、あなたは「マイデータ」で、名前は「南」として報告されていますが、ベンチマークでは、それが報告されていることがわかります同様に、私のデータは "Duke Energy Corp"として "Duke 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 

ありがとう!

答えて

0
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 
+1

ニース!あなたは、データ列の項目が常に小さく、Benchmark列で探している部分文字列を含んでいるという事実を使用しましたか?私はその前にそのように使われたものは見ていない。ありがとう! –

+0

うん。 'Data'の各要素に対してBenchmarkの各要素に対してTRUEまたはFALSEの結果が得られるので、少なくとも1つの一致が存在する限り、結果をTRUE(したがって0)にするために' any'を使うことができます。お力になれて、嬉しいです。 –

+0

大文字の違いを考慮に入れてこのコードを調整できるかどうかは疑問でした。たとえば、私はあなたの提案を自分のデータに適用しました。それは、データ列に「Nisoft」、ベンチマーク列に「NiSoft」という名前がある場合を除いて、素晴らしいことです。私はこれに正規表現ベースの修正を適用する方法を私は思っていた? –

関連する問題