R 如何合并不同大小的数据帧并添加空白数据?

R 如何合并不同大小的数据帧并添加空白数据?,r,dataframe,R,Dataframe,我有一个包含3000行的df1,看起来像: Stabr Area_name trucks FIPS 2 IL Cook 16.8 72000 3 AL Autauga County 13.8 31088 4 CA Orange 9.8 32080 5 AZ Maricopa 30.9 4000 6 CA

我有一个包含3000行的
df1
,看起来像:

  Stabr      Area_name      trucks    FIPS
2    IL        Cook          16.8     72000
3    AL Autauga County       13.8     31088
4    CA       Orange         9.8      32080
5    AZ       Maricopa       30.9     4000
6    CA       Los Angeles    21.2     1022
       county      state  FIPS  cars accidents
2        Cook   Illinois 72000  10435     89
3      Orange California  32080  1547      5
4    Maricopa    Arizona  4000   1571     19
5 Los Angeles California  1022   6759    100
我还有一个
df2
,有1500行,看起来像:

  Stabr      Area_name      trucks    FIPS
2    IL        Cook          16.8     72000
3    AL Autauga County       13.8     31088
4    CA       Orange         9.8      32080
5    AZ       Maricopa       30.9     4000
6    CA       Los Angeles    21.2     1022
       county      state  FIPS  cars accidents
2        Cook   Illinois 72000  10435     89
3      Orange California  32080  1547      5
4    Maricopa    Arizona  4000   1571     19
5 Los Angeles California  1022   6759    100
我想通过
FIPS
列将
汽车
事故
列添加到
df1
匹配中。如果较小的
df2
中没有相应的FIP,我想在
cars
和`事故'列中添加零。最终产品的外观如下所示:

  Stabr      Area_name      cars     FIPS     cars     accidents
2    IL        Cook          16.8     72000   10435     89
3    AL Autauga County       13.8     31088   0         0 
4    CA       Orange         9.8      32080   1547      5
5    AZ       Maricopa       30.9     4000    1571      19
6    CA       Los Angeles    21.2     1022    6759      100

我们可以使用
join

library(data.table)
setDT(df1)[df2,c('cars', 'accidents') := .(cars, accidents),
      on = .(FIPS)][is.na(cars), c('cars', 'accidents') := .(0, 0)][]
#  Stabr      Area_name trucks  FIPS  cars accidents
#1:    IL           Cook   16.8 72000 10435        89
#2:    AL Autauga County   13.8 31088     0         0
#3:    CA         Orange    9.8 32080  1547         5
#4:    AZ       Maricopa   30.9  4000  1571        19
#5:    CA    Los Angeles   21.2  1022  6759       100
数据
dplyr中的
df1:

library(dplyr)

df1 %>%
  left_join(df2 %>% select(-state, -county), by = 'FIPS') %>%
  mutate_at(vars(cars, accidents), coalesce, 0L)
输出:

  Stabr     Area_name trucks  FIPS  cars accidents
1    IL          Cook   16.8 72000 10435        89
2    AL Autauga County   13.8 31088    0         0
3    CA        Orange    9.8 32080  1547         5
4    AZ      Maricopa   30.9  4000  1571        19
5    CA    Los Angeles   21.2  1022 6759       100