我在R中有3个数据框,我试图合并在一起,通过类似的练习在美国地图上绘制信息。
数据框1 =我要分析的数据,它只有FIPS美国国家代码。 数据帧2 =主要用于数据帧1的查找表,它将状态代码映射到名称。 数据框3 =绘图用于使用[{3}} R-Bloggers所述的[all_states]函数映射到状态的信息,该函数具有映射信息,但需要首先标记为" alabama&# 34;与" 1"。
我一直在玩这个并且磕磕绊绊,可能错过了一个明显的解决方案。我正在尝试像这样的第一件事,但它没有用。
我正在寻找一种相对直接的方式来桥接" 1"在我的数据集中" alabama"不使用
sqldf
包,也不将FIPS表硬编码到我的代码中。有什么建议?
> withstates <- merge(FBuse,(state=States$FIPS.Code), by="state")
Error in fix.by(by.y, y) : 'by' must specify a uniquely valid column
数据框1:
> head(FBuse$state,20)
[1] 18 9 47 12 50 39 51 51 24 12 24 51 42 18 45 37 25 23 13 47
数据框2:
> head(States)
Name FIPS.Code USPS.Code
1 Alabama 1 AL
2 Alaska 2 AK
3 Arizona 4 AZ
4 Arkansas 5 AR
5 California 6 CA
6 Colorado 8 CO
数据框3:
> head(all_states,20)
long lat group order region subregion
1 -87.46201 30.38968 1 1 alabama <NA>
2 -87.48493 30.37249 1 2 alabama <NA>
3 -87.52503 30.37249 1 3 alabama <NA>
4 -87.53076 30.33239 1 4 alabama <NA>
5 -87.57087 30.32665 1 5 alabama <NA>
6 -87.58806 30.32665 1 6 alabama <NA>
7 -87.59379 30.30947 1 7 alabama <NA>
8 -87.59379 30.28655 1 8 alabama <NA>
9 -87.67400 30.27509 1 9 alabama <NA>
10 -87.81152 30.25790 1 10 alabama <NA>
11 -87.88026 30.24644 1 11 alabama <NA>
12 -87.92037 30.24644 1 12 alabama <NA>
13 -87.95475 30.24644 1 13 alabama <NA>
14 -88.00632 30.24071 1 14 alabama <NA>
15 -88.01778 30.25217 1 15 alabama <NA>
16 -88.01205 30.26936 1 16 alabama <NA>
17 -87.99486 30.27509 1 17 alabama <NA>
18 -87.95475 30.27509 1 18 alabama <NA>
19 -87.90318 30.28082 1 19 alabama <NA>
20 -87.82870 30.28655 1 20 alabama <NA>
答案 0 :(得分:1)
如果列名不匹配,请使用by.x
和by.y
。在你的情况下:
merge(FBuse, States, by.x="state", by.y = "FIPS.Code", all = TRUE)
all
参数显示jour join中缺少的任何行。你可以删除它
如果你想要“内心”加入。
从 Alabama 到 alabama 的步骤类似。除非你必须照顾上限。例如,使用tolower
更改列值。
使用dplyr包你可以这样说:
library(dplyr)
FBuse %>%
left_join(States, by = c("state" = "FIPS.Code")) %>%
mutate(Name = tolower(Name)) %>%
left_join(all_states, by = c("Name" = "region"))
并根据需要从left_join
更改为inner_join
。