r语言 - 合并具有不同列的数据框架



我有两个数据帧:

df1 = data.frame(Bird_ID = c(1:6), Sex = c("Male","Female","Male","Male","Male","UNK"), Age.years =c("2","4","8","2","12","1"))
df2 = data.frame(Bird_ID = c(7), Sex = c("Female"), date.fledged= c("19/10/2021"))
df1
# Bird_ID Sex Age.years
# 1 Male 2
# 2 Female 4
# 3 Male 8
# 4 Male 2
# 5 Male 12
# 6 UNK 1

df2
# Bird_ID Sex Date.fledged
# 7 Female 19/10/2021
  • 我的第一个数据框(df1)是我的数据库,我有我所有的鸟类记录与有用的信息
  • 我的第二个数据帧(df2)是"更新"。我想把这些信息合并到主数据库(df1),输出将是这样的:
dfmerged = data.frame(Bird_ID = c(1:7), Sex = c("Male","Female","Male","Male","Male","UNK","Female"), Age.years =c("2","4","8","2","12","1",NA))`
dfmerged
# Bird_ID Sex Age.years
# 1 Male 2
# 2 Female 4
# 3 Male 8
# 4 Male 2
# 5 Male 12
# 6 UNK 1
# 7 Female NA

我如何使用来自df2的信息更新鸟类数据库df1,并仅保留主数据库df1中的(和所有)列?例如,这里dfmerged只保留df1的列,去掉"Date.fledged"来自df2和bird 7的列的NA为"age .years";因为数据丢失了(这是想要的输出)。

你可以使用

library(dplyr)
df1 %>% 
bind_rows(df2) %>% 
select(names(df1))

这返回

Bird_ID    Sex Age.years
1       1   Male         2
2       2 Female         4
3       3   Male         8
4       4   Male         2
5       5   Male        12
6       6    UNK         1
7       7 Female      <NA>

可以进行全联接。

merge(df1, df2, by = c('Bird_ID', 'Sex'), all = TRUE)[-4]
#  Bird_ID    Sex Age.years
#1       1   Male         2
#2       2 Female         4
#3       3   Male         8
#4       4   Male         2
#5       5   Male        12
#6       6    UNK         1
#7       7 Female      <NA>

Indplyr-

library(dplyr)
full_join(df1, df2, by = c('Bird_ID', 'Sex')) %>%
select(-date.fledged)

最新更新