2016-11-23 5 views
2

名前とIDを含むリストがあります。このように:リストを使用してR内のデータフレームにIDを割り当てます

df <- structure(list(Headline1 = structure(c(1L, 2L, 1L, 2L, 1L, 2L, 
1L, 2L), .Label = c("brand1-Trainingspak Kopen", "brand1-Trainingspak Nodig?" 
), class = "factor"), Headline2 = structure(c(2L, 2L, 1L, 1L, 
2L, 2L, 1L, 1L), .Label = c("Maat niet Goed? Gratis Retour", 
"Ontdek de Nieuwe Collectie."), class = "factor"), Description = structure(c(1L, 
1L, 1L, 1L, 2L, 2L, 2L, 2L), .Label = c("Al Meer Dan 1 Miljoen Tevreden Klanten. Ontdek De Mooiste Collectie Van Ons Land", 
"Bestel nu! Alle Trainingspakken van brand1 ®, direct uit voorraad leverbaar." 
), class = "factor")), .Names = c("Headline1", "Headline2", "Description" 
), row.names = c(NA, -8L), class = "data.frame") 

IDは、例えば、リスト内の値は次のとおりです。

l <- structure(list(Kopen = 11, Nodig = 12, `Maat niet Goed? Gratis Retour` = 21, 
    `Ontdek de Nieuwe Collectie.` = 22, `Bestel NU, Morgen in Huis` = 23, 
    `Al Meer Dan 1 Miljoen Tevreden Klanten. Ontdek De Mooiste Collectie Van Ons Land` = 31, 
    `Meer Dan %N% %ad_group%, Altijd Op Voorraad! Scherpe Prijzen.Bestel Nu.` = 32, 
    `Bestel nu! Alle maten %ad_group% van %merk%, direct uit voorraad leverbaar` = 33), .Names = c("Kopen", 
"Nodig", "Maat niet Goed? Gratis Retour", "Ontdek de Nieuwe Collectie.", 
"Bestel NU, Morgen in Huis", "Al Meer Dan 1 Miljoen Tevreden Klanten. Ontdek De Mooiste Collectie Van Ons Land", 
"Meer Dan %N% %ad_group%, Altijd Op Voorraad! Scherpe Prijzen.Bestel Nu.", 
"Bestel nu! Alle maten %ad_group% van %merk%, direct uit voorraad leverbaar" 
)) 

$Kopen 
[1] 11 

$Nodig 
[1] 12 

$`Maat niet Goed? Gratis Retour` 
[1] 21 

$`Ontdek de Nieuwe Collectie.` 
[1] 22 

$`Bestel NU, Morgen in Huis` 
[1] 23 

$`Al Meer Dan 1 Miljoen Tevreden Klanten. Ontdek De Mooiste Collectie Van Ons Land` 
[1] 31 

$`Meer Dan %N% %ad_group%, Altijd Op Voorraad! Scherpe Prijzen.Bestel Nu.` 
[1] 32 

$`Bestel nu! Alle maten %ad_group% van %merk%, direct uit voorraad leverbaar` 
[1] 33 

は今、私はこのようになります私のデータフレーム内の要素を識別するために、このリストを使用したいです11,12,21,22,23,31,32,33。

私が期待する結果は次のとおりです。

Headline1 Headline1_id Headline2     Headline2_id 
Kopen  11   Ontdek de Nieuwe Collectie. 22 
Nodig  12   Ontdek de Nieuwe Collectie. 22 

私はsapply, lapply and vapplyとの組み合わせでpmatch, %in%, match, grep and greplを使用しようとしました。しかし、残念ながら私はパターンを適切に一致させることができませんでした。これに利用できるクイックソリューションはありますか?

だから、もう一度をラップする:

名(l)は別途Headline1Headline2Descriptionと照合しなければなりません。次に、新しい列を作成し、要素が識別されている場合はidを追加します。

+0

をあなたもNASが右にあるのだろうか? 'Headerline2 [3] ' – Sotos

+0

はい、一致しない場合はNAにする必要があります。私が正しいとすれば、データフレーム全体がIDSに一致するはずですが、実際には異なる行に一致するはずです。そこで、NAsを導入する。 –

答えて

2

あなたはこのために求めている(または多分それはあなたにいくつかのアイデアを与える)かどうかを知るしないでください:

cbind(df, apply(df, 1:2, getElement, object = l))[c(1,4,2,5,3,6)]

+0

確かに、これは完璧なマッチのために働く。しかし、私は部分一致でこれを行うこともできますか?私の人生はもっと楽になります。ありがとう! eleborateに: Bestel nu!すべての広告ユニット%ad_group%van%merk%、すべての広告ユニットに直接一致する必要があります!すべてのトレーニングは、ブランド1の直感的な操作で行えます。 –

+0

あなたはマッチングの他の例を挙げることができますか?つまり、このマッチを行うことは容易ではありません。別の文字列もまた、bestel nuで始まります。それとも、その文章は同じですが、その間にある言葉ですか? –

+0

遅れて申し訳ありません。私は休暇中でした。 IDSは、文章の違いに基づいて割り当てる必要があります。したがって実際には、パーセント記号を使用してこれらのIDを選択することができます。理想的には私はどんなマッチングも必要ありません。しかし、私は文に基づいてIDSを生成します。しかし、数値への変換は機能しません。なぜなら、キーワードを使用するたびに変更されるからです。別の文脈では、それは私が欲しくないものです。 %iはパターン置換に使用し、サブジェクトに固有の特定のキーワードで埋めます。 –

関連する問題