R 由索引的数据帧生成的数据帧子集

R 由索引的数据帧生成的数据帧子集,r,dataframe,subset,R,Dataframe,Subset,我想选择以下数据框的特定值: src: c1 c2 c3 c4 c5 c6 rA 9 12 44 88 11 1 rB 12 7 14 24 48 67 rC 0 15 97 17 13 18 rD 74 51 10 11 14 8 通过存储在数据框中的索引,使用相同的列名和行名作为值: idx: c1 c4 c6 1 rA rD rA 2 rD rA rB 3 rB rC rC 所以结果应该是这样的: res: 1 2 3 1 9 11 1

我想选择以下数据框的特定值:

src:
   c1 c2 c3 c4 c5 c6
rA  9 12 44 88 11  1
rB 12  7 14 24 48 67
rC  0 15 97 17 13 18
rD 74 51 10 11 14  8
通过存储在数据框中的索引,使用相同的列名和行名作为值:

idx:
   c1 c4 c6
 1 rA rD rA
 2 rD rA rB
 3 rB rC rC
所以结果应该是这样的:

res:
    1  2  3
 1  9 11  1
 2 74 88 67
 3 12 17 18

请问最优雅的方法是什么?

这里有一种使用
匹配的方法:

result <- idx
result[] <- src[cbind(match(unlist(idx), rownames(src)), 
                      match(names(idx)[col(idx)], names(src)))]
result

#  c1 c4 c6
#1  9 11  1
#2 74 88 67
#3 12 17 18

result这里有一种使用
match
的方法:

result <- idx
result[] <- src[cbind(match(unlist(idx), rownames(src)), 
                      match(names(idx)[col(idx)], names(src)))]
result

#  c1 c4 c6
#1  9 11  1
#2 74 88 67
#3 12 17 18

result给定的原始帧定义如下:

src <- data.frame(matrix(c(9, 12, 44, 88, 11, 1,
                           12, 7, 14, 24, 48, 67,
                           0, 15, 97, 17, 13, 18,
                           74, 51, 10, 11, 14, 8), nrow = 4, byrow = TRUE))
rownames(src) <- paste0("r", LETTERS[1:4])
colnames(src) <- paste0("c", 1:6)

idx <- data.frame(matrix(c("rA", "rD", "rB",
                           "rD", "rA", "rC",
                            "rA", "rB", "rC"), nrow = 3),
                  stringsAsFactors = FALSE)
colnames(idx) <- c("c1", "c4", "c6")
它生成一个具有预期结果的矩阵:

     c1 c4 c6
[1,]  9 11  1
[2,] 74 88 67
[3,] 12 17 18

给定原始帧的定义如下:

src <- data.frame(matrix(c(9, 12, 44, 88, 11, 1,
                           12, 7, 14, 24, 48, 67,
                           0, 15, 97, 17, 13, 18,
                           74, 51, 10, 11, 14, 8), nrow = 4, byrow = TRUE))
rownames(src) <- paste0("r", LETTERS[1:4])
colnames(src) <- paste0("c", 1:6)

idx <- data.frame(matrix(c("rA", "rD", "rB",
                           "rD", "rA", "rC",
                            "rA", "rB", "rC"), nrow = 3),
                  stringsAsFactors = FALSE)
colnames(idx) <- c("c1", "c4", "c6")
它生成一个具有预期结果的矩阵:

     c1 c4 c6
[1,]  9 11  1
[2,] 74 88 67
[3,] 12 17 18

为什么这个问题被评为负面评价?我希望能以评论的形式得到反馈,这样我就可以改进问题或防止将来出现同样的错误。谢谢请考虑使用“代码> DPUT/CODE”提供可重复的例子。为什么这个问题收到否定的评级?我希望能以评论的形式得到反馈,这样我就可以改进问题或防止将来出现同样的错误。谢谢请考虑使用“代码> dPUT/CODE”提供可重复的示例。