首页 > 解决方案 > 加入数据帧时追加和覆盖

问题描述

我有以下三个数据框:

prim <- data.frame("t"=2007:2012,
                   "a"=1:6,
                   "b"=7:12)

secnd <- data.frame("t"=2012:2013,
                    "a"=c(5, 7))

third <- data.frame("t"=2012:2013,
                    "b"=c(11, 13))

我想secnd分两步third加入prim。在第一步中,我加入primand secnd,其中任何现有元素都会被 中的元素prim覆盖secnd,所以我们最终得到:

     t  a  b
1 2007  1  7
2 2008  2  8
3 2009  3  9
4 2010  4 10
5 2011  5 11
6 2012  5 12
7 2013  7 NA

在此之后,我想加入third,现有元素再次被以下元素覆盖third

     t  a  b
1 2007  1  7
2 2008  2  8
3 2009  3  9
4 2010  4 10
5 2011  5 11
6 2012  5 11
7 2013  7 13

有没有办法使用dplyrR 或基础 R 来实现这一点?

标签: rdataframejoindplyr

解决方案


通过使用dplyr,您可以:

require(dplyr)

prim %>% full_join(secnd, by = 't') %>%
  full_join(third, by = 't') %>%
  mutate(a = coalesce(as.integer(a.y),a.x),
         b = coalesce(as.integer(b.y),b.x)) %>%
  select(t,a,b)

我添加了该as.integer功能,因为您的数据框中有不同的数据类型。


推荐阅读