我有一个 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
我有一个邮政编码查找表,其中包含 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
in "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 数据的行。”
我对此的解释绝对是错误的。有人可以解释我做错了什么以及如何完成这个简单的任务吗?
我提到:如何根据特定条件合并数据框并更改元素值? https://stackoverflow.com/questions/24644026/how-to-merge-data-frames-and-change-element-values-based-on-certain-conditions, r 中 2 个相关数据帧的子集和合并 https://stackoverflow.com/questions/19468378/subsetting-and-merging-from-2-related-data-frames-in-r, 如何在R中合并两个大小不等的数据框 https://stackoverflow.com/questions/22859624/how-to-merge-two-unequal-size-data-frame-in-r但它们都与我的问题无关。