You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何根据另一列的值筛选R数据框中对应列的取值?

解决方法

你的代码没法运行的原因是select函数不能直接用行级的条件判断——select是用来选择整列的,不是逐行决定选哪个列的值。而且你最终要的是单个匹配值,不是保留某一列,所以得换个思路处理。

下面给两种可行的解法:

方法1:用dplyr完整流程提取值

indiv <- 19125
df <- data.frame(Code_barre = c(19124, 19125, 19132, 19131),
                 ID = c("Jean","Paul","Marie","Georges"),
                 cross = c(18,15,19,20), 
                 Names = c("2020","2021","2022", "2023"))

result <- df %>%
  # 筛选出匹配Code_barre或cross的行
  filter(Code_barre == indiv | cross == indiv) %>%
  # 根据匹配的字段选择对应列的值
  mutate(target_val = case_when(
    Code_barre == indiv ~ ID,
    cross == indiv ~ Names
  )) %>%
  # 提取出目标值
  pull(target_val)

print(result)
# 当indiv=19125时输出"Paul",indiv=19时输出"2022"

方法2:直接定位行和列提取(基础R写法)

如果不想用dplyr,也可以用基础R直接定位:

indiv <- 19
df <- data.frame(Code_barre = c(19124, 19125, 19132, 19131),
                 ID = c("Jean","Paul","Marie","Georges"),
                 cross = c(18,15,19,20), 
                 Names = c("2020","2021","2022", "2023"))

# 找到匹配的行号
match_row <- which(df$Code_barre == indiv | df$cross == indiv)
# 判断应该取哪一列
match_col <- if(df$Code_barre[match_row] == indiv) "ID" else "Names"
# 提取值
result <- df[match_row, match_col]

print(result)

原代码的问题总结

  1. select函数的使用场景错误:它是用来选择整列的,不能用逐行的逻辑判断来决定选哪个列的值;
  2. 如果你要的是单个值,而不是一个数据框列,用pull或者直接索引提取更合适;
  3. 单个值匹配时用==比%in%更直观,两者功能一致但==语义更清晰。

内容的提问来源于stack exchange,提问作者Mmerose

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 15:35:20