R语言中如何基于DataFrame两列匹配行索引创建新向量?
嗨,这问题很清晰,我来给你几种实现方法,都能精准得到你想要的结果!
方法1:用命名向量做映射(基础R)
这个方法最直观,先把a和c的对应关系做成一个命名向量,然后直接用b的值去索引这个向量就行:
# 先创建a到c的映射关系 a_to_c <- setNames(df$c, df$a) # 生成目标向量d d <- a_to_c[as.character(df$b)] # 查看结果 d #> [1] "A" "B" "A" "B" "A" "D"
方法2:用match()函数(基础R)
match()会返回b中每个元素在a里的位置,用这个位置去提取c列对应的值:
d <- df$c[match(df$b, df$a)] # 验证结果是否符合预期 identical(d, c("A", "B", "A", "B", "A", "D")) #> [1] TRUE
方法3:用dplyr的连接方式(适合tidyverse用户)
如果你习惯用tidyverse的语法,可以通过左连接来实现逻辑匹配:
library(dplyr) # 先制作一个a与c的查找表 lookup_table <- df %>% select(a, c) # 左连接后提取对应的值 d <- df %>% left_join(lookup_table, by = c("b" = "a")) %>% pull(c.y) # 查看结果 d #> [1] "A" "B" "A" "B" "A" "D"
这几种方法都能完美实现你的需求,你可以根据自己的代码习惯来选择~
内容的提问来源于stack exchange,提问作者John L. Godlee
相关产品推荐
相关产品推荐

