将两个具有相同列的数据帧合并到一个数据帧中,然后合并其中一个

时间:2020-05-17 17:33:21

标签: r merge

我有两个样式相同的数据框,想将它们合并为具有相同列的数据框,同时还要合并其中一列。

两个数据框如下所示:

    year variable
1  1968    2
2  1969    5
3  1970    <NA>
4  1971    <NA>
5  1972    <NA>

    year variable
1  1968    <NA>
2  1969    <NA>
3  1970    5
4  1971    7
5  1972    <NA>

最后,我想得到一个看起来像这样的数据框:

    year variable
1  1968    2
2  1969    5
3  1970    5
4  1971    7
5  1972    <NA>

谢谢!

2 个答案:

答案 0 :(得分:1)

使用dplyr中的coalesce

df1 <- bind_cols(year = seq(1968, 1972, 1),
                 variable = c(2, 5, NA, NA, NA))

df2 <- bind_cols(year = seq(1968, 1972, 1),
                 variable = c(NA, NA, 5, 7, NA))


left_join(df1, df2, by='year') %>% 
  mutate(
    variable = coalesce(variable.x, variable.y)
  ) %>% 
  select(year, variable)

答案 1 :(得分:0)

您可以使用dplyr软件包,并删除NA。 首先,您需要转换为适当的NA

df1 <- data.frame(year = c(1968,1969,1970,1971,1972),
                 variable = c(2,5,'<NA>', '<NA>', '<NA>'))

df2 <- data.frame(year= c(1968,1969,1970,1971,1972),
                  variable = c('<NA>', '<NA>', 5, 7, '<NA>'))

library(dplyr)
df1 <- df1 %>%
  mutate(variable = ifelse(variable == "<NA>", NA, variable))
df2 <- df2 %>%
  mutate(variable = ifelse(variable == "<NA>", NA, variable))
df_m <- full_join(df1,df2) %>%
  na.omit(variable)

您可以使用合并,但我更喜欢tidyverse。