Я пытаюсь отобразить значения столбцов объекта 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
- идентификатор репортера, pid
- (торговый) идентификатор партнера, страны rid
и pid
одинаковы. Одинаковые идентификаторы в столбце rid
сопоставляются с несколькими строками в столбце pid
в терминах TradeValue
.
Однако с этими данными есть некоторые проблемы. Во-первых, поскольку страны (обычно развивающиеся страны), которые не представили статистику торговли, не имеют данных для извлечения, их идентификаторы отсутствуют в столбце rid
(например, страна 1). С другой стороны, идентификаторы этих стран могут вводиться в столбец pid
через отчеты других стран (в этом случае репортеры, как правило, являются развитыми странами). Следовательно, столбец rid
содержит только часть идентификатора страны (только 139 из 161), а столбец pid
содержит все 161 идентификатора страны.
Я пытаюсь сопоставить этот example_data
фрейм данных с матрицей смежности 161 x 161, используя rid
для строки и pid
для столбца, где каждая ячейка представляет TradeValue
между любыми двумя идентификаторами страны. , Для этого есть пара вещей, с которыми мне нужно разобраться:
- Заполните те идентификаторы стран, которые отсутствуют в столбце
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
но, на мой взгляд, я не мог понять, как это сделать. Буду очень признателен, если кто-нибудь поможет мне в этом.