Кодирование торговых данных для направления - PullRequest
1 голос
/ 18 мая 2019

Я хочу создать торговую карту (данные об импорте) между Африкой и миром в R. По сути, у меня есть только 4 переменные, как показано в таблице ниже (для около 14.000 наблюдений). Import1 и Import2 - две торговые страны, где flow1 - импорт import1 из import2, а flow2 - импорт import2 из import1.

import1 import2 flow1 flow2

Algeria Tunisia   113.96    130.01

Algeria Libya     1.966 11.19

Algeria Sudan     0.0165   0

Что я не могу понять, так это как заставить R читать поток1 как направление от import2 -> import1 и flow2 как направление торговли import1 -> import2. Просто ищу какое-то руководство о том, как кодировать эту часть в R, так как я действительно пока не смог найти ничего полезного в Интернете. Спасибо!

Я создал фрейм данных с 4 переменными, но он просто использует import1 и import2 и считает, что import1 -> import2 - это соединение.

df1 <- Trade_Data %>% 
       filter(year == 2003) %>% 
       select(importer1, importer2, flow1, flow2)
df1 <-df1[!(df1$flow1== 0 & df1$flow2==0),]
View(df1)
g1 <- graph.data.frame(df1, directed = T)
g1

Я ожидаю, что на выходе будет Алжир <-> Тунис (например), но на самом деле на выходе будет Алжир -> Тунис.

1 Ответ

0 голосов
/ 18 мая 2019

Вот пример из файла справки graph.data.frame.

actors <- data.frame(name=c("Alice", "Bob", "Cecil", "David",
                            "Esmeralda"),
                     age=c(48,33,45,34,21),
                     gender=c("F","M","F","M","F"))
relations <- data.frame(from=c("Bob", "Cecil", "Cecil", "David",
                               "David", "Esmeralda"),
                        to=c("Alice", "Bob", "Alice", "Alice", "Bob", "Alice"),
                        same.dept=c(FALSE,FALSE,TRUE,FALSE,FALSE,TRUE),
                        friendship=c(4,5,5,2,1,1), advice=c(4,5,5,4,2,3))
g <- graph_from_data_frame(relations, directed=TRUE, vertices=actors)

получая эти края

+ edges from 3d02353 (vertex names):
[1] Bob      ->Alice Cecil    ->Bob   Cecil    ->Alice David    ->Alice David    ->Bob  
[6] Esmeralda->Alice

Как видите, в своем коде вы не создали массив вершин, но создали два отношения.

Особенно в ориентированном графе, вы не можете быстро объединить все данные в одну строку, если вы действительно хотите знать, что отношения развиваются противоположным образом.

Я бы предложил вам перейти к длинному формату с каждым направленным ребром (от, до) как отдельной строкой, а затем поместить поток в строку в соответствующем направлении.

Я бы также предложил использовать более описательные имена столбцов, такие как "экспортер", "импортер" или "от" "до", поскольку import1 и import2 действительно не предоставляют достаточно автономной информации, чтобы знать, что они собой представляют.

В качестве альтернативы, если вы действительно хотите выразить это как два разных отношения с Алжиром (import_from, export_to), то вы можете сделать это также. Но в этом случае всегда будет отображаться отношение Алжир -> х

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...