我想合并两个数据框。
一个数据帧是路由列表:
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中有可能吗?
答案 0 :(得分:1)
以下内容适用于任意数量的出发和到达城市的任意数量的路线。
它结合了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)