r - 加入数据帧时追加和覆盖
问题描述
我有以下三个数据框:
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
。在第一步中,我加入prim
and 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
有没有办法使用dplyr
R 或基础 R 来实现这一点?
解决方案
通过使用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
功能,因为您的数据框中有不同的数据类型。
推荐阅读
- elasticsearch - 如何获取 elsticsearch 集群中当前打开的分片数量?
- shiny - 以闪亮的方式显示 render::rmarkdown 的进度
- react-native - 如何手动将 React Native 新组件与 expo 链接?
- sql - Rails 4 可以使用 ActiveRecord 进行嵌套查询吗?
- firebase - FirebaseAuth.instance.signInWithEmailAndPassword(email, password) 使颤振崩溃
- ansible - 如何将 ansible ini 库存转换为 json 或 yaml
- python - 将一段八度(mrdivide)代码转换为numpy
- jsf - 如何将选择菜单中的标签存储到 bean 并填充到输入文本字段中
- c# - Xamarin 计算机视觉
- c# - 将 C# 项目合并到单个类文件中