r - 如何在R中组合来自不同数据帧的两个变量?
问题描述
我是 R 编程新手,所以这个问题可能很简单。无论如何,我试图找到一些我正在尝试做的具体事情的答案,但没有得到它。
所以,我试图将我拥有的新数据导入到我的旧 data.frame 中。问题是这些数据必须用已经存在的变量替换以前的 NA 值。此外,我的数据在不同时期(年份)有不同的个人(公司),而我的新数据集只有缺失的公司和年份,以及我已经拥有的一些观察结果。
我试图用下面的数据框模拟问题:
带有 NA 的数据框:
df1 <- data.frame( company = c(rep("A",3), rep("B",3), rep("C",3)),
year = c(rep(2016:2018,each=1)),
income = c(95,87,93,NA,NA,58,102,80,NA),
debt = c(43,50,51,NA,37,37,53,NA,NA),
stringsAsFactors= F )
为了搜索新数据,我创建了一个仅包含缺失数据的数据集,因为我的数据有很多观察结果:
df_NA <- data.frame(df1[is.na(df1$income & df1$debt),])
所以在搜索之后,我能够找到丢失的数据,现在我有这样的东西:
df2 <- data.frame( company = c("A", "B" , "C" , "C"),
year = c(2018, 2016, 2017, 2018),
income = c(60,55, 80, 82),
debt = c(32,37, 53,48),
stringsAsFactors= F )
现在,我正在尝试将这些数据放在一起,所以我有完整的 data.frame 可以工作。
问题是我还没有找到办法。我尝试过合并和加入,为公司和年份编制索引,但是在 data.frame 中具有相同名称的变量会被重复和后缀。
在我的数据中,我有更多的观察和变量要填充,所以我想找到一种可以通过命令完成的方法。这也将在未来再次发生,所以这将非常有帮助。
如果这已经被回答,我很抱歉。谢谢!
解决方案
这是使用的选项data.table
:
library(data.table)
setDT(df1)
setDT(df2)
df1[df2, on=c("company", "year"), c('income', 'debt') := { list(i.income, i.debt)}]
# company year income debt
#1: A 2016 95 43
#2: A 2017 87 50
#3: A 2018 60 32
#4: B 2016 55 37
#5: B 2017 NA 37
#6: B 2018 58 37
#7: C 2016 102 53
#8: C 2017 80 53
#9: C 2018 82 48
或使用其他选项dplyr
library(dplyr)
full_join(df1, df2, by = c("year", "company")) %>%
mutate(
income = coalesce(income.x, income.y),
debt= coalesce(debt.x, debt.y),
) %>%
select(company, year, income, debt)
推荐阅读
- python - Python中嵌套函数模式的用例是什么?
- json - CICS TS(DFHJS2LS):当从 POSTMAN 工具接收到 MAINFRAME 时,汉字正在损坏
- node.js - 使用客户端凭据的 Node.js https.request 方法
- android-studio - Android Studio 语法高亮问题
- module - 商店无法识别我的模块并且没有显示错误
- scala - Spark Structured Streaming 从查询异常中恢复
- laravel - Laravel 项目 - 托管在 Heroku - SendGrid SMTP 连接问题
- python - 并行写入文件
- docker - Docker 服务突然停止响应
- git - 通过 Visual Studio 代码中的源代码控制远程进入 vps 时无法执行 git 命令