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

dplyr如何根据每行随机指定的列名提取对应列的数值

R提取每行对应随机列数值的实现方法

提供两种常用实现方案,可根据场景选择:

  • tidyverse管道流写法(可读性优先)
    适配dplyr 1.0及以上版本,逻辑清晰易读,适合中小数据集:
    library(dplyr)
    df <- df %>%
      rowwise() %>%
      mutate(target_val = c_across(all_of(ran))) %>%
      ungroup()
    
    逻辑说明:rowwise()将数据按行分组,每一行读取ran列存储的目标列名,用c_across()提取该列对应行的数值,最后用ungroup()取消行分组避免影响后续操作。
  • 矩阵索引写法(性能优先)
    无需逐行遍历,运行速度远高于行化操作,适合十万行以上的大数据集:
    df$target_val <- df[cbind(1:nrow(df), df$ran)]
    
    逻辑说明:构造「行号-列名」一一对应的二维索引矩阵,直接批量定位所有目标单元格的数值。

效果测试示例

可通过以下测试代码验证运行结果:

library(tibble)
library(dplyr)
# 构造测试数据集
df <- tibble(
  a = 1:3,
  b = 4:6,
  c = 7:9,
  d = 10:12,
  e = 13:15,
  f = 16:18
) %>% 
  mutate(ran = sample(c("a","b","c","d","e","f"),n(), replace=T))
# 执行提取操作
df <- df %>%
  rowwise() %>%
  mutate(target_val = c_across(all_of(ran))) %>%
  ungroup()

运行后target_val列即为每行ran列对应列的数值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 08:27:03