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

如何在R中按行索引并依据matrix的t列数值选取对应列元素

问题解决:根据t列值提取对应列的元素

原始矩阵

Occ1Occ2Occ3t
AJJ2
JJA3
AAJ1
JJJ2

提取规则说明

t列的数字对应要选取的列编号(Occ1为第1列,Occ2为第2列,Occ3为第3列),示例如下:

Occ1Occ2Occ3t
AJJ2
JJA3
AAJ1
JJJ2

期望结果

J
A
A
J

错误代码分析

你的循环存在两个核心问题:

  1. 每次循环强制将t赋值为t[1],导致永远只取第一行的t值
  2. 变量名t与数据框列名t冲突,会覆盖原始的t列数据

错误代码:

for(i in 1:nrow(matrix)){
   t <- t[1]
   position <- matrix[i,t]
   print(position)
}

解决方案

方法1:修正for循环

避免变量名冲突,每次循环取当前行的t值:

# 先给数据框命名(避免和内置函数matrix重名)
df <- data.frame(
  Occ1 = c("A", "J", "A", "J"),
  Occ2 = c("J", "J", "A", "J"),
  Occ3 = c("J", "A", "J", "J"),
  t = c(2, 3, 1, 2)
)

for(i in 1:nrow(df)){
  current_t <- df$t[i]  # 提取第i行的t值
  position <- df[i, current_t]  # 取对应列的元素
  print(position)
}

方法2:向量化操作(更高效的R风格写法)

R中优先用向量化操作替代循环,直接通过索引矩阵一次性提取所有元素:

# 用cbind生成行号+列号的索引矩阵,直接提取目标元素
result <- df[cbind(1:nrow(df), df$t)]
print(result)
# 输出:
# [1] "J" "A" "A" "J"

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 08:10:32