Разбиение и горизонтальное объединение данных в одно поле в R - PullRequest
0 голосов
/ 30 ноября 2018

Я хотел бы объединить два кадра данных.

Один кадр данных - это список маршрутов:

code   d   p
 AMM PFO   3
 AMM BER   3
 AMM SVQ   3

Другой кадр данных - это список городов:

code  cityname  country
TYO   Tokyo     Japan

Я хочу объединить с помощью = code

в итоге получится что-то вроде этого: (d, p)

code  city      country r1      r2
PIS   Poitiers  France  LON,14  LYS,65  

Но я не уверен, как можно разделить это.Для моего случая использования мне не нужны имена столбцов, но мне нужно, чтобы каждый маршрут был в отдельном столбце

Возможно ли это в R?

1 Ответ

0 голосов
/ 30 ноября 2018

Следующее должно работать с любым количеством маршрутов для любого количества городов отправления и назначения.

Объединяет столбцы p и d и объединяет информацию о городе назначения.Единственная сложная задача - назначить произвольные номера маршрутов, что он делает с вызовом min_rank().

library(dplyr)
library(tidyr)

# slightly expanded data set to make sure it works with multiple departure cities
d1 <- data.frame(
  code = c(rep("AMM", 3), "TYO"),
  d = c("PFO", "BER", "SVQ", "PFO"),
  p = c(3, 3, 7, 4)
)

d2 <- data.frame(
  code = c("AMM", "TYO"), 
  cityname = c("Zizya", "Tokyo"), 
  country = c("Jordan", "Japan")
)

d1 %>% 
  unite(dp, d, p, sep = ",") %>%
  left_join(d2, by = "code") %>%
  group_by(code) %>%
  mutate(route = min_rank(dp)) %>%
  mutate(route = paste0("r", route)) %>%
  spread(route, dp)
...