我有一个直观的二元数据框,看起来像这样。
ccode.a ccode.b year mindist int.a2b
167603 220 570 1976 8.985324 0
624316 781 770 1976 7.914206 0
593896 740 620 1976 9.128673 0
669443 900 660 1976 9.235735 1
323404 434 20 1976 8.764419 0
353101 451 432 1976 5.390160 0
37109 53 700 1976 9.373724 0
624853 790 2 1976 8.949047 0
242472 355 53 1976 9.030233 0
35129 53 350 1976 9.006963 0
481129 600 140 1976 8.377329 0
621802 781 310 1976 8.885368 0
236655 350 600 1976 7.587584 0
192503 290 950 1976 9.636472 1
464722 580 94 1976 9.551535 0
550661 694 42 1976 9.377167 0
585022 712 625 1976 8.586424 0
637007 812 2 1976 8.902645 0
539818 678 572 1976 8.402542 0
690214 950 900 1976 7.859377 1
135804 160 135 1976 6.314121 0
554291 694 811 1976 8.603649 0
496453 620 680 1976 7.565657 0
68160 90 220 1976 9.003781 0
605932 770 482 1976 8.355514 0
509185 640 660 1976 4.873909 0
24928 42 830 1976 9.774045 0
454705 570 666 1976 8.740049 0
92800 100 51 1976 6.631003 1
492025 616 651 1976 7.140152 0
598335 750 663 1976 7.997375 0
485329 615 130 1976 8.951390 0
330093 435 520 1976 8.560956 0
74135 91 570 1976 9.453192 0
465351 580 235 1976 8.989404 1
227129 345 165 1976 9.296795 0
488046 615 696 1976 8.298939 0
381548 483 375 1976 8.325534 0
237750 350 840 1976 9.103709 0
402138 510 265 1976 8.688151 0
372394 475 950 1976 9.798338 0
216445 338 570 1976 8.890926 1
598308 750 660 1976 8.082419 0
613237 775 235 1976 9.100852 0
310790 420 42 1976 8.617836 0
611272 771 696 1976 8.065013 0
183450 235 551 1976 8.739090 0
659939 840 590 1976 8.879307 0
506308 640 70 1976 9.232063 0
188756 290 91 1976 9.120557 1
我想创建一个包含所有ccode.a
和ccode.b
对的矩阵,
d.sender <- matrix(0, nrow = 192, ncol = 192, dimnames = list(unique(dyad$ccode.a), unique(dyad$ccode.a)))
然后将int.a2b
的值(我必须对一堆变量执行此操作)分配给矩阵中的相应单元格。这将在数据集中每年单独完成。由于数据帧是定向二进制的,我还将有一个相同维度的接收器矩阵,它反映了我现在想要创建的发送器矩阵。
答案 0 :(得分:3)
如果我理解你想要的是正确的,这是一种方式:
x <- data.frame(a=(1:3),b=(4:6),val=c(8,3,7))
library(reshape2)
acast(x, a~b, value.var="val")
# 4 5 6
#1 8 NA NA
#2 NA 3 NA
#3 NA NA 7