R语言如何根据指定列表匹配数据框另一列的对应取值
原代码报错原因
- 变量名误用
list:list是R的基础保留函数名,用作变量名容易引发逻辑冲突,建议替换为animal_vec这类自定义名称 - 条件判断逻辑错误:
df$animal == i会对整列做等值匹配,返回长度等于数据集行数的逻辑向量,而R的if语句仅支持接收长度为1的逻辑值,因此触发报错 - 取值逻辑错误:即便条件判断不报错,
append(plant_list, df$plant)会把整列植物数据都追加到结果中,无法提取匹配到的单个植物值
解决方案
dplyr 实现(保持输入动物向量的顺序)
核心是先过滤匹配的动物行,再按照你输入的动物向量顺序排序,最后提取植物列即可:
library(dplyr) # 你的动物查询向量,替换原来的list变量名 animal_vec <- c("dog", "cat", "fish") plant_list <- df %>% # 过滤出匹配的动物行 filter(animal %in% animal_vec) %>% # 按照输入的动物向量顺序排序,保证输出植物的顺序和你预期一致 arrange(factor(animal, levels = animal_vec)) %>% # 提取植物列为向量 pull(plant)
运行后plant_list的结果就是你需要的c("tree", "grass", "daisy")。
基础R 最简实现
用match函数直接匹配位置索引,一行代码即可完成,自动对齐输入向量的顺序:
animal_vec <- c("dog", "cat", "fish") plant_list <- df$plant[match(animal_vec, df$animal)]
内容的提问来源于stack exchange,提问作者JVDeasyas123
相关产品推荐
相关产品推荐

