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

如何按行索引与列索引的组合提取data.frame中的对应值?

高效提取data.frame中指定行列组合对应的值

我有一个名为df的data.frame,结构如下:

structure(list(GWeek = c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10), Team1 = c(33, 24, 30, 18, 31, 37, 26, 35, 19, 22), Team2 = c(21, 24, 33, 21, 28, 23, 28, 32, 24, 26), Team3 = c(25, 30, 27, 21, 35, 26, 28, 25, 29, 33), Team4 = c(30, 29, 28, 21, 33, 18, 17, 29, 32, 27), Team5 = c(12, 18, 31, 21, 41, 30, 27, 31, 18, 24), Team6 = c(30, 23, 31, 27, 35, 21, 24, 41, 43, 24)), class = "data.frame", row.names = c(NA, -10L))

显示效果为:

GWeek Team1 Team2 Team3 Team4 Team5 Team6
1      1    33    21    25    30    12    30
2      2    24    24    30    29    18    23
3      3    30    33    27    28    31    31
4      4    18    21    21    21    21    27
5      5    31    28    35    33    41    35
6      6    37    23    26    18    30    21
7      7    26    28    28    17    27    24
8      8    35    32    25    29    31    41
9      9    19    24    29    32    18    43
10    10    22    26    33    27    24    24

需要从该表中提取部分值组成向量,这些值由两个向量的组合指定:

# 行索引
r.idx <- c(4,5,6,9,10)
# 列索引
c.idx <- c("Team5", "Team3", "Team6", "Team4", "Team2")

即需要获取以下位置的值:

df[4,"Team5"], df[5,"Team3"], df[6,"Team6"], df[9,"Team4"], df[10, "Team2"]

由于数据集规模较大,且组合数量非常多,需要一种高效方法提取df中对应r.idx第i个元素(行)与c.idx第i个元素(列)位置的值。


高效解决方案

方法1:矩阵索引(原生最快捷)

这是R处理此类需求效率最高的方法,尤其适配大数据集:

# 将列名转换为列位置索引
col_pos <- match(c.idx, colnames(df))
# 构造(row, col)形式的索引矩阵
idx_matrix <- cbind(r.idx, col_pos)
# 直接提取对应值
result <- df[idx_matrix]

运行后result即为目标向量:[1] 21 35 21 32 26

方法2:tidyverse风格实现

如果习惯使用tidyverse生态,可通过以下方式实现,小数据集下效率差异可忽略:

library(dplyr)

tibble(r = r.idx, c = c.idx) %>%
  rowwise() %>%
  mutate(value = df[r, c]) %>%
  pull(value)

输出结果同样为:[1] 21 35 21 32 26

方法3:循环(不推荐大数据集)

循环方式效率极低,仅作参考:

result <- numeric(length(r.idx))
for(i in seq_along(r.idx)){
  result[i] <- df[r.idx[i], c.idx[i]]
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 20:51:13