R语言如何依据df2的类别映射为df1匹配添加对应类别列
方法1:基础R
match() 实现(最贴合需求逻辑,性能优异) 你要的匹配逻辑可以直接通过match函数实现,match(df1$v, df2$v)会返回df1每一行的v值在df2$v中对应的行索引,直接用索引取df2的类别列赋值即可:
df1$category <- df2$c[match(df1$v, df2$v)]
运行后输出结果如下:
v category 1 3 c 2 3 c 3 3 c 4 2 b 5 3 c 6 2 b 7 2 b 8 2 b 9 3 c 10 1 a
方法2:基础R 表合并函数
merge()实现 如果需要保留两个表的所有关联列,可使用左连接合并:
# 保留df1的所有行,按v列关联匹配df2的类别 df1 <- merge(x = df1[, "v", drop = FALSE], y = df2, by = "v", all.x = TRUE) # 按需修改列名 colnames(df1)[2] <- "category"
方法3:dplyr 左连接实现(tidyverse常用语法)
如果你习惯使用tidy生态的语法,用left_join更直观:
library(dplyr) df1 <- df1 %>% # 移除原有空category列 select(-category) %>% # 按v列左连接匹配df2的类别 left_join(df2, by = "v") %>% # 修改列名符合需求 rename(category = c)
内容的提问来源于stack exchange,提问作者user13822027
相关产品推荐
相关产品推荐

