假设我有一个数据帧,其中2列是A和B。A和B的值可以在1到150之间。我有一个150 * 150的矩阵。我想要一个新列,它是A行和B列中矩阵的元素。
示例:假设矩阵是2 * 2而不是150 * 150
数据框D:
A B
1 2
2 1
矩阵M:
13 12
2 4
新列:
C
12
2
答案 0 :(得分:1)
我们可以将data.frame
用作matrix
并将其用于子集。在这里,“ D”一旦转换为matrix
,就用作行/列索引,以从'M'返回元素。
D$C <- M[as.matrix(D)]
D
# A B C
#1 1 2 12
#2 2 1 2
D <- structure(list(A = 1:2, B = 2:1), class = "data.frame",
row.names = c(NA, -2L))
M <- cbind(c(13, 2), c(12, 4))
答案 1 :(得分:1)
您可以尝试使用转置t()
D$C <- M[t(t(D))]
或
D$C <- M[cbind(D$A, D$B)]
这样
> D
A B C
1 1 2 12
2 2 1 2