有条件地将基于部分匹配的列值分配给向量中的至少1个元素

时间:2015-11-15 17:12:33

标签: regex r apply sqldf

我有2个数据框

market<-c('New York, NY','Some place in Chicago','Lala land')
d1<-as.data.frame(market)
metro<-c('Chicago','Meow','New York')
d2<-as.data.frame(metro)

我需要在d2$inmarket中找到d2$metro区域时创建另一列d1$market为1,否则为0.我的目标是让d2看起来像这样:

     metro inmarket
1  Chicago        1
2     Meow        0
3 New York        1

我已经探讨了grepsqldf选项,但我没有看到任何回答我的问题。

This会返回匹配的d1索引,但我需要索引d2才能赋值1或0。

我还可以使用sqldf选择匹配的d1中的行,但我无法反过来,因为我无法搜索{ {1}}显然是{1}}。

d2$metro

有什么想法吗?

编辑:这适用于一个元素,但我需要循环:

d1$market

1 个答案:

答案 0 :(得分:0)

一种选择是将子线和市场&#39;列&#39; d1&#39;并使用%in%

d2$inmarket <- +(d2$metro %in% gsub(paste0('.*(', paste(d2$metro, 
        collapse='|'), ').*'), '\\1', d1$market))
d2
#     metro inmarket
#1  Chicago        1
#2     Meow        0
#3 New York        1