使用R语言匹配两个数据框:用物种名称替换编码
用match函数替换Species编码为对应名称的解决方案
方法一:直接使用match函数替换
先创建和你提供结构一致的示例数据框:
df1 <- data.frame( Species = c(101, 101, 116, 139), `Catch by Year` = c(2500, 1759, 111, 178) ) df2 <- data.frame( code = c(101, 116, 139, 144), name = c("COD", "YELLOWTAIL", "BLUE ANTIMORA", "CUSK") )
使用match函数定位编码对应的索引,直接替换df1$Species列:
# match返回df1$Species每个元素在df2$code中的位置索引 df1$Species <- df2$name[match(df1$Species, df2$code)]
执行后df1的结果为:
| Species | Catch by Year |
|---|---|
| COD | 2500 |
| COD | 1759 |
| YELLOWTAIL | 111 |
| BLUE ANTIMORA | 178 |
方法二:用merge合并数据框(更直观)
如果需要保留原数据结构同时完成替换,merge函数是更稳妥的方案:
# 按编码匹配合并,保留df1的所有行 merged_df <- merge(df1, df2, by.x = "Species", by.y = "code", all.x = TRUE) # 调整列顺序和名称,得到目标结果 merged_df <- merged_df[, c("name", "Catch by Year")] colnames(merged_df)[1] <- "Species"
这个方法会自动处理匹配不到的编码(显示为NA),适合数据量较大或存在不匹配情况的场景。
内容的提问来源于stack exchange,提问作者Fish_Person
相关产品推荐
相关产品推荐

