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

基于另一列值获取对应列名并生成新列的R语言实现方法

解决方案:根据D列数值匹配对应列生成新列E

针对你给出的数据集需求(D列数值1对应A列、2对应B列、3对应C列,生成E列提取对应值),这里提供几种实现方式:

方法一:基础R矩阵索引法

这是最高效的基础R实现方式,利用矩阵索引直接定位取值:

# 提取A/B/C列,并按D列指定的位置逐行取值
data_ex$E <- data_ex[, c("A", "B", "C")][cbind(seq_len(nrow(data_ex)), data_ex$D)]

cbind(seq_len(nrow(data_ex)), data_ex$D) 生成包含行号和目标列位置的索引矩阵,直接用于子数据框的取值,一步完成所有行的计算。

方法二:tidyverse(dplyr)实现

如果习惯使用tidyverse生态,可以用行处理的方式实现:

library(dplyr)

data_ex <- data_ex %>%
  rowwise() %>%
  mutate(E = pick("A", "B", "C")[[D]]) %>%
  ungroup()

rowwise() 让函数按行执行,pick() 选中目标列后,通过[[D]]取出当前行D指定位置的列值,最后ungroup()取消行分组。

方法三:循环遍历(适合逻辑理解)

如果想清晰看到每行的处理逻辑,可用循环实现:

data_ex$E <- NA  # 先初始化E列
for(i in seq_len(nrow(data_ex))){
  # 根据D的数值匹配对应列名
  target_col <- c("A", "B", "C")[data_ex$D[i]]
  # 提取当前行对应列的数值
  data_ex$E[i] <- data_ex[i, target_col]
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 21:30:53