2016-11-23 53 views
2

可以说我有一个包含名称和ID的列表。就像这样:使用一个列表来分配一个ID到一个数据框在R

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 

现在我想用这个列表来确定数据帧我的元素,看起来像这样:

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是列表,例如值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 

我试图在组合使用pmatch, %in%, match, grep and greplsapply, lapply and vapply。但不幸的是,我无法让模式正确匹配。有没有可用的快速解决方案?

所以收官一次:

名(L)应该对Headline1,分别Headline2Description匹配。然后创建一个新列,并在元素被识别时添加该ID。

+0

你也将有来港定居的权利?即'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

确实,这适用于完美匹配。但是,我也可以通过部分匹配来做到这一点。会让我的生活更轻松。谢谢!点此进入: Bestel nu!所有mate%ad_group%van%merk%,直接和其他人一起应该匹配Bestel nu!所有Trainingspakken面包车品牌®,直接uoor voorraad leverbaar。 –

+0

你能举出其他匹配的例子吗?我的意思是,做这个比赛并不容易,另一个字符串也以bestel nu开头;或者你的意思是,也许这些句子是相同的,但中间的词%? –

+0

对于迟到的回复感到抱歉。我正在度假。 IDS应根据句子的差异进行分配。所以确实可以使用百分比符号来选择这些ID。理想情况下,我不需要任何匹配。但我根据这个句子生成了IDS。但转换为数字将无法正常工作,因为每当我再次使用关键字时它都会改变。在另一种情况下,这是我不想要的。 %i用于模式替换,并填写特定于主题的特定关键字。 –

相关问题