R dataframe如何根据匹配向量的重复规则输出对应重复字符串
你原来的写法中,df$a %in% c("A","A","B", "B")返回的是长度为2的逻辑向量[1] TRUE TRUE,用它索引只有2个元素的df$cat,自然只能得到去重后的2个结果,不会保留输入匹配向量的重复结构。
解决方法
方法1:基础R match() 函数(最简推荐)
match(x, table)会返回和第一个参数x长度一致的索引值,对应每个x元素在table中第一次匹配到的位置,刚好适配你的需求:
match_vec <- c("A","A","B","B") df$cat[match(match_vec, df$a)]
运行后输出:
[1] "X" "X" "Y" "Y"
如果存在匹配不到的元素,该方法会返回NA,你可以按需做缺失值处理。
方法2:dplyr 左连接(适合复杂匹配场景)
如果你的匹配逻辑更复杂,或者已经在用tidyverse生态,可以把待匹配的向量转成单列数据框后做左连接:
library(dplyr) # 待匹配向量转数据框 data.frame(a = c("A","A","B","B")) %>% # 和原表关联 left_join(df, by = "a") %>% # 提取目标列 pull(cat)
输出结果和方法1完全一致。
内容的提问来源于stack exchange,提问作者manu p
相关产品推荐
相关产品推荐

