我想一列值映射data.frame
对象(包括161个国家中的大量双边贸易的数据)为161 X 161邻接矩阵(也data.frame
类),使得每个单元代表二进贸易任何两个国家之间流动。
数据看起来是这样的
# load the data from dropbox folder
library(foreign)
example_data <- read.csv("https://www.dropbox.com/s/hf0ga22tdjlvdvr/example_data.csv?dl=1")
head(example_data, n = 10)
rid pid TradeValue
1 2 3 500
2 2 7 2328
3 2 8 2233465
4 2 9 81470
5 2 12 572893
6 2 17 488374
7 2 19 3314932
8 2 23 20323
9 2 25 10
10 2 29 9026220
length(unique(example_data$rid))
[1] 139
length(unique(example_data$pid))
[1] 161
其中, rid
是记者ID, pid
是(贸易)伙伴ID,一个国家的rid
和pid
是相同的。 在相同的ID(一个或多个) rid
柱与在多行匹配pid
在以下方面柱TradeValue
。
然而,也有一些问题,与此数据。 首先,因为没有报告贸易统计的国家(通常是发展中国家)没有数据被提取,其ID(S)的缺席rid
列(如国家1)。 在另一方面,这些国家的ID(一个或多个)可进入pid
通过其他国家的报告列(在这种情况下,记者往往是发达国家)。 因此, rid
列只包含一些国家ID(仅139出的161),而pid
列有所有161国家ID。
我正在试图做的是映射这个example_data
数据框使用一个161 X 161邻接矩阵rid
了行和pid
列其中每个单元代表TradeValue
任何两个国家之间的ID。 为此,有一对夫妇的事情,我需要解决:
- 填写所缺的那些国家ID(S)
rid
列example_data
和暂时,在与各行设置的所有单元格的值设置为0。 - 通过前面的步骤,使用归咎于其他国家报告的双边贸易统计那些“0”细胞; 如果相应的统计数据仍然不可用,留下那些“0”细胞,因为它们。
例如,对于以下形式的5-国家数据帧
rid pid TradeValue
2 1 50
2 3 45
2 4 7
2 5 18
3 1 24
3 2 45
3 4 88
3 5 12
5 1 27
5 2 18
5 3 12
5 4 92
所需的输出应该是这样的
pid_1 pid_2 pid_3 pid_4 pid_5
rid_1 0 50 24 0 27
rid_2 50 0 45 7 18
rid_3 24 45 0 88 12
rid_4 0 7 88 0 92
rid_5 27 18 12 92 0
但在我心中的顶部,我无法弄清楚如何。 这将非常感激,如果有人可以帮助我在此。