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
相关产品推荐
相关产品推荐

