R 如何合并不同大小的数据帧并添加空白数据?
我有一个包含3000行的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
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