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

R语言如何根据指定列条件逐行选取其他两列的对应值

实现方案

你可以通过以下几种常用方法实现需求:

基础R写法

直接使用向量化的ifelse()函数即可一步得到结果,语法简单易读:

# 生成结果向量
res <- ifelse(df$x == "A", df$y, df$z)
# 验证结果
res
# 作为新列加入原数据框
df$new_col <- res

运行后输出的res和你期望的结果完全一致:[1] 1 3 2 4

dplyr 写法

如果日常使用tidyverse生态,用case_when()实现扩展性更强,后续如果新增x的其他取值规则可以直接加条件:

library(dplyr)
df <- df %>%
  mutate(new_col = case_when(
    x == "A" ~ y,
    x == "B" ~ z
  ))
# 提取结果向量的话直接取df$new_col即可

高性能向量化索引(适合大数据量场景)

如果数据量很大(十万行以上),可以用矩阵索引的方式进一步提升运行效率:

# 列名映射规则
col_map <- c(A = "y", B = "z")
# 按行取对应列的数值
res <- df[cbind(seq_len(nrow(df)), col_map[df$x])]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 16:15:01