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”提供可重复的示例。