基于另一列值获取对应列名并生成新列的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
相关产品推荐
相关产品推荐

