vag*_*ond 5 merge r vlookup dataframe
我有一个 59720 obs 的数据框。看起来像下面。我想为查找表中的每个观察值分配一个 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
Run Code Online (Sandbox Code Playgroud)
我有一个邮政编码查找表,其中包含 43126 个唯一的邮政编码,如下所示:
> data (b)
MARKETNAME ZIPCODE
NEW YORK 00501
NEW YORK 00544
SPRINGFIELD-HOLYOKE 01001
SPRINGFIELD-HOLYOKE 01002
SPRINGFIELD-HOLYOKE 01003
SPRINGFIELD-HOLYOKE 01004
Run Code Online (Sandbox Code Playgroud)
我想简单地将 MARKETNAME 分配给我的数据集, "a"比较ZIPCODEin "b"。所以我用
> c <- merge(a, b, by="ZIPCODE") .
它返回了 58,972 个 obs。这意味着我失去了 748 个 obs。我不想丢失任何记录,a所以我将代码更改如下:
> c <- merge (a, b, by = "ZIPCODE" , all.x=TRUE) .
奇怪的是,这返回了 61,652 个 obs。而不是我的期望返回 59,720 obs。根据a带有一些 NA 的原始数据框。
根据文档,
“如果为 TRUE,则额外的行将添加到输出中,x 中的每一行在 y 中没有匹配的行。这些行将在那些通常用 y 中的值填充的列中具有 NA。默认值为 FALSE,这样输出中只包含同时包含 x 和 y 数据的行。”
我对此的解释绝对是错误的。有人可以解释一下我做错了什么以及我如何完成这个简单的任务吗?
我提到:如何根据某些条件合并数据框并更改元素值?,从 r 中的 2 个相关数据帧进行子集化和合并,如何在 R 中合并两个大小不等的数据帧,但没有一个类似于我的问题。