合并r中的数据框和查找表,保留数据框中的所有记录

时间:2014-07-31 22:27:47

标签: r merge dataframe vlookup

我的数据框为59720 ob​​s。看起来像下面。我想从查找表中为每个观察分配一个MARKETNAME。

> data (a)

     DAY  HOUR LEAD Row.Count     DATE    ITIME  HOMEPHONE            CITY  STATE ZIPCODE     ZONENAME
1 Monday 13:00    1      9430 7/1/2013 13:42:51            FORT LAUDERDALE     FL  33315       68
2 Monday 13:00    1      9432 7/1/2013 13:43:50 xxxxx9802x  PLEASANT GROVE     AL  35127       82
3 Monday 13:00    1      9434 7/1/2013 13:46:18 5xxxx85x10      ORO VALLEY     AZ  85737       54
4 Monday  0:00    1      9435 7/1/2013  0:04:34 50xxxx1x364          SPOKANE    WA  99204      211
5 Monday 11:00    1      9436 7/1/2013 11:45:43 951xxxxx20        RIVERSIDE    CA  92507       31
6 Monday 11:00    1      9437 7/1/2013 11:46:26 760xxxxx679            VISTA    CA  92081      539

我有一个包含43126个唯一邮政编码的邮政编码查询表,如下所示:

> data (b)

MARKETNAME            ZIPCODE
NEW YORK              00501
NEW YORK              00544
SPRINGFIELD-HOLYOKE   01001
SPRINGFIELD-HOLYOKE   01002
SPRINGFIELD-HOLYOKE   01003
SPRINGFIELD-HOLYOKE   01004

我想简单地将MARKETNAME分配给我的数据集"a",比较ZIPCODE中的"b"。所以我用了

> c <- merge(a, b, by="ZIPCODE")

它返回了58,972个障碍物。这意味着我失去了748个障碍物。我不想丢失a的任何记录,所以我改变了我的代码如下:

> c <- merge (a, b, by = "ZIPCODE" , all.x=TRUE)

奇怪的是,这回到了61,652个障碍物。而不是我的期望,返回59,720障碍。根据具有一些NA的原始a数据帧。

根据文档,

  

“如果为TRUE,那么额外的行将被添加到输出中,x中的每一行都有一行,y中没有匹配的行。这些行将在那些通常用y值填充的列中具有NA。默认情况下为FALSE,因此输出中只包含x和y数据的行。“

我对此的解释绝对是错误的。有人可以解释一下我做错了什么以及如何完成这个简单的任务?

我提到了:How to merge data frames and change element values based on certain conditions?Subsetting and Merging from 2 Related Data Frames in rhow to merge two unequal size data frame in R,但它们都不类似于我的问题。

1 个答案:

答案 0 :(得分:2)

我更喜欢来自join的{​​{1}},默认情况下是左连接,返回第一个数据框中记录的所有匹配。

plyr