使用其他数据框的索引为矩阵赋值

Assign values to matrix with index of other data frame

我的数据框,D 是这样的。

D$fit 有距离 (0:6) 和 dg (1:3) 信息

D <- read.table(header = TRUE, text = "
   distance  dg fit
1         0   1 A
2         1   1 B
3         2   1 C
4         3   1 D
5         4   1 E
6         5   1 F
7         6   1 G
8         0   2 H
9         1   2 I
10        2   2 J
11        3   2 K
12        4   2 L
13        5   2 M
14        0   3 O
15        1   3 P
16        2   3 Q
17        3   3 R
")

我想为这个矩阵分配拟合值,md,对应于距离和 dg。

md <- matrix(1:21, nrow = 7)
colnames(md) <- c(1:3)
rownames(md) <- c(0:6)
md[] <- NA

   1  2  3
0 NA NA NA
1 NA NA NA
2 NA NA NA
3 NA NA NA
4 NA NA NA
5 NA NA NA
6 NA NA NA

我试过但使用此代码失败了

cmd = expand.grid(i=seq(0,6), j = seq(1,3))
i <- seq(0,6)
j <- seq(1,3)
md[i,j] <-  D$fit[D$distance == cmd[1] & D$dg == cmd[2]]

我们可以使用 acast 来自 library(reshape2)

library(reshape2)
acast(D, distance~dg, value.var="fit")

reshape 来自 base R

reshape(D, idvar="distance", timevar="dg", direction="wide")