r - 使用基于行和列的另一个表中的值填充表
问题描述
我有一个看起来像这样的空数据框:
df <- data.frame(Hugo_Symbol=c("CDKN2A", "JUN", "IRS2","MTOR",
"NRAS"),
A183=c(NA, NA, NA, NA, NA),
A240=c(NA, NA, NA, NA, NA),
A330=c(NA, NA, NA, NA, NA))
我想使用更大的数据框来填充前一个。较大数据框的结构如下:
df2 <- data.frame(Hugo_Symbol=c("CDKN2A", "JUN", "IRS2","MTOR",
"NRAS", "TP53", "EGFR"),
A183=c(2.3, 3.3, 2.6, 4.7, 1.2, 5.7, 3.4),
A240=c(1.3, 2.3, 4.6, 5.7, 2.2, 7.7, 1.4),
A330=c(0.3, 2.3, 1.6, 1.7, 4.2, 1.7, 4.4),
A335=c(1.3, 0.3, 0.6, 0.7, 0.2, 0.7, 0.4),
A345=c(0.3, 4.3, 4.6, 4.7, 4.2, 4.7, 0.4))
我想要的输出应该是这样的:
Hugo_Symbol A183 A240 A330
1 CDKN2A 2.3 1.3 0.3
2 JUN 3.3 2.3 2.3
3 IRS2 2.6 4.6 1.6
4 MTOR 4.7 5.7 1.7
5 NRAS 1.2 2.2 4.2
我尝试使用dplyr
包,特别是semi_join()
函数,但它返回空表给我。
解决方案
您还可以使用以下解决方案:
library(dplyr)
df %>%
left_join(df2, by = "Hugo_Symbol") %>%
mutate(across(ends_with(".x"), ~ coalesce(.x, get(gsub(".x", ".y", cur_column()))))) %>%
select(Hugo_Symbol, ends_with(".x")) %>%
rename_with(~ gsub(".x", "", .), ends_with(".x"))
Hugo_Symbol A183 A240 A330
1 CDKN2A 2.3 1.3 0.3
2 JUN 3.3 2.3 2.3
3 IRS2 2.6 4.6 1.6
4 MTOR 4.7 5.7 1.7
5 NRAS 1.2 2.2 4.2
推荐阅读
- python - 在groupby之后获取除上一行之外的下一行
- excel - 水晶报表显示数据
- node.js - 机器人配置中的消息传递端点 gulp serve VS gulp ngrok-serve
- unity3d - 将 MRTK AR 项目导入 IOS 设备时出现问题
- sql - 何编写 SQL 选择语句以根据值可以为空的某些列(例如,5 列)获取数据?
- java - 某些对象无法序列化
- c# - 在 LINQ 中过滤两个数组
- c++ - 在 C++ 中创建新的数据类型
- javascript - 如何将 HTML 元素转换为实际可读的 html?
- php - 如何使用时区偏移(-11:00)将 UTC 时间转换为其他时区