R语言中如何使用位置数组提取矩阵对应位置的元素?
R语言按行提取对应指定列元素的方法
核心实现思路
R的矩阵支持传入两列的索引矩阵批量提取元素,第一列对应目标元素的行号,第二列对应目标元素的列号,正好满足按行取指定列元素的需求。
基础实现(无额外依赖)
# 构造行列配对的索引矩阵传入即可 result <- mymatrix[cbind(seq_len(nrow(mymatrix)), mycols)]
运行后result的输出即为你期望的c(2, 6, 8)。
原写法不符合预期的原因说明
你使用mymatrix[,mycols]得到3×3矩阵是R的默认索引规则导致的:逗号分隔的矩阵索引中,第二个参数传入向量时,默认会为所有行提取该向量指定的全部列,因此返回所有行的第2、3、2列,共3列数据。
可选扩展实现(tidyverse场景)
如果你的开发流程基于tidyverse体系,可以用行遍历的方式实现,方便和其他数据处理流程衔接:
library(dplyr) result <- as.data.frame(mymatrix) %>% rowwise() %>% summarise(res = c_across(everything())[mycols[cur_group_id()]]) %>% pull(res)
内容的提问来源于stack exchange,提问作者mconsidine
相关产品推荐
相关产品推荐

