У меня есть объект из трех столбцов dataframe
, записывающий данные о двусторонней торговле между 161 странами, данные имеют двоичный формат, содержащий 19687 строк, три столбца (репортер (rid
), партнер (pid
) и их двусторонний торговый поток (TradeValue
) в данный год). rid
или pid
принимает значение от 1 до 161, и стране присваиваются те же rid
и pid
. Для любой данной пары (rid
, pid
), в которой rid
= / = pid
, TradeValue
(rid
, pid
) = TradeValue
(pid
, rid
).
Данные (в R) выглядят так:
Данные были получены из базы данных UN Comtrade , каждый rid
соединен с кратным pid
для получения данных о двусторонней торговле, но, как видно, не каждый pid
имеет числовой значение id, потому что я назначил rid
или pid
стране только в том случае, если имеется список соответствующих экономических показателей этой страны, поэтому в данных есть NA
, несмотря на то, что между этой страной существует TradeValue
страна, представившая отчет (rid
). То же самое применяется, когда страна становится «репортером», в этой ситуации эта страна не сообщила о каких-либо TradeValue
партнерам, и ее идентификационный номер отсутствует в столбце rid
. (Следовательно, вы можете видеть, что столбец rid
начинается с 2, потому что страна 1 (то есть, Афганистан) не сообщала никаких данных о двусторонней торговле с партнерами). Быстрая проверка со сводной статистикой помогает подтвердить это
length(unique(example_data$rid))
[1] 139
# only 139 countries reported bilateral trade statistics with partners
length(unique(example_data$pid))
[1] 162
# that extra pid is NA (161 + NA = 162)
Поскольку большинство стран сообщают данные о двусторонней торговле с партнерами, а для тех, кто этого не делает, они, как правило, являются малыми странами. Поэтому я хочу сохранить полный список из 161 страны и преобразовать этот example_data
фрейм данных в матрицу смежности 161 x 161, в которой
- для тех стран, которые отсутствуют в столбце
rid
(например, rid
== 1), создайте для каждой из них строку и задайте для всей строки (в матрице 161 x 161) значение 0.
- для тех стран (
pid
), которые не разделяют записи TradeValue
с определенным rid
, установите для этих ячеек значение 0.
Например, предположим, что в матрице смежности 5 x 5 страна 1 не сообщала о каких-либо статистических данных о торговле с партнерами, остальные четыре страны сообщали свои статистические данные о двусторонней торговле с другими (кроме страны 1). Исходный кадр данных похож на
rid pid TradeValue
2 3 223
2 4 13
2 5 9
3 2 223
3 4 57
3 5 28
4 2 13
4 3 57
4 5 82
5 2 9
5 3 28
5 4 82
, из которого я хочу преобразовать его в матрицу смежности 5 x 5 (в формате data.frame
), требуемый вывод должен выглядеть следующим образом
V1 V2 V3 V4 V5
1 0 0 0 0 0
2 0 0 223 13 9
3 0 223 0 57 28
4 0 13 57 0 82
5 0 9 28 82 0
И используя тот же метод на example_data
, чтобы создать матрицу смежности 161 x 161. Однако, после пары проб и ошибок с reshape
и другими методами, я все еще не мог обойтись с таким преобразованием, даже после первого шага.
Будет ли очень признательно, если кто-нибудь сможет просветить меня об этом?