将数据帧拆分和水平合并为R中的单个字段

时间:2018-11-30 04:17:01

标签: r merge split dplyr

我想合并两个数据框。

一个数据帧是路由列表:

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 :(得分:1)

以下内容适用于任意数量的出发和到达城市的任意数量的路线。

它结合了pd列,并与目的地城市信息结合在一起。唯一棘手的部分是分配任意路由号,这与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)