如何基于映射条件为数据框添加对应ID列?
为df2添加对应饮品的ID(基于df的映射)
嘿,这事儿很简单!我们可以通过数据合并的方式,把df里的ID映射到df2对应的行里。下面给你两种常用的实现方法:
方法一:Base R 原生 merge() 函数
首先先确认我们的原始数据框:
# 定义原始数据 df <- data.frame(ID = c("1", "2", "3"), Drink = c("Cola", "Pepsi", "Fanta")) df2 <- data.frame(Drink = c("Cola", "Fanta", "Cola", "Pepsi", "Pepsi"))
使用merge()函数做左连接,保留df2的所有行,并匹配df中对应的ID:
# 执行合并,all.x = TRUE 表示保留df2的所有行 df2_with_id <- merge(df2, df, by = "Drink", all.x = TRUE) # 查看结果 print(df2_with_id)
运行后输出的结果如下:
Drink ID
1 Cola 1
2 Cola 1
3 Fanta 3
4 Pepsi 2
5 Pepsi 2
方法二:Tidyverse 中的 left_join()(更直观的管道风格)
如果你习惯用tidyverse的语法,推荐用dplyr包的left_join()函数,代码可读性更高:
# 先安装并加载tidyverse(如果还没装的话) # install.packages("tidyverse") library(dplyr) # 用管道语法实现左连接 df2_with_id <- df2 %>% left_join(df, by = "Drink") # 查看结果 print(df2_with_id)
这个方法得到的结果和上面完全一致,而且代码看起来更流畅~
小提示
- 如果df里某个Drink对应多个ID(多对多映射),这两个方法都会自动处理,生成对应的多行结果;
- 如果df2里出现了df中没有的饮品名称,对应的ID会显示为
NA,这是正常的预期结果。
内容的提问来源于stack exchange,提问作者WoeIs
相关产品推荐
相关产品推荐

