假设我有一个矩阵:
> mat1
A B
A 1 3
B 2 4
还有一个数据框:
> df
First Second
1 A A
2 A B
3 B A
4 B B
如何查找 First
的值和Second
在矩阵中?
在这种情况下我想要的输出是:
> df
First Second result
1 A A 1
2 A B 3
3 B A 2
4 B B 4
我发现我可以做 df <- cbind(df, result = diag(mat1[df$First, df$Second]))
但有没有办法在没有 diag()
的情况下做到这一点? ?我想如果我有一个很长的数据框,那么 mat1[df$First, df$Second]
如果生成较大的矩阵,会使代码运行速度变慢。
最佳答案
替代方案:
df$result <- mat1[as.matrix(df)]
df
# First Second result
# 1 A A 1
# 2 A B 3
# 3 B A 2
# 4 B B 4
如果 df
有更多列,您需要显式地对它们进行子集化,如下所示
mat1[as.matrix(df[c("First","Second")])]
# [1] 1 3 2 4
关于r - 在 R 中使用矩阵作为查找表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69396268/