如何在R中利用索引将DataFrame的值替换为另一个DataFrame的对应值
解决方案
首先先构造你提供的示例数据(方便直接测试):
# 创建示例数据框 node_list <- data.frame( ID = c(1, 2, 3), loca2 = c("A", "B", "C"), stringsAsFactors = FALSE ) sup <- data.frame( ID = c(1, 2, 3), To = c(2, 1, 1), stringsAsFactors = FALSE )
方法一:Base R 原生实现
利用match()函数匹配ID的位置,直接替换对应列的值:
# 替换ID列 sup$ID <- node_list$loca2[match(sup$ID, node_list$ID)] # 替换To列 sup$To <- node_list$loca2[match(sup$To, node_list$ID)]
match(x, table)会返回x中每个元素在table中的索引位置,用这个索引取node_list$loca2的对应值,就能完成替换。
方法二:dplyr 管道风格实现
如果你习惯用tidyverse系列工具,用dplyr的mutate()配合match()可以更简洁地完成:
library(dplyr) sup <- sup %>% mutate( ID = node_list$loca2[match(ID, node_list$ID)], To = node_list$loca2[match(To, node_list$ID)] )
运行任意一种方法后,sup就会变成你想要的结果:
| ID | To |
|---|---|
| A | B |
| B | A |
| C | A |
内容的提问来源于stack exchange,提问作者cccbc
相关产品推荐
相关产品推荐

