在R中合并三个数据帧,而不使用SQL包

时间:2015-04-19 22:23:43

标签: r ggplot2

我在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>

1 个答案:

答案 0 :(得分:1)

如果列名不匹配,请使用by.xby.y。在你的情况下:

merge(FBuse, States, by.x="state", by.y = "FIPS.Code", all = TRUE)

all参数显示jour join中缺少的任何行。你可以删除它 如果你想要“内心”加入。

Alabama alabama 的步骤类似。除非你必须照顾上限。例如,使用tolower更改列值。

使用dplyr

使用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