【问题标题】:Merge two datasets合并两个数据集
【发布时间】:2018-03-05 22:04:50
【问题描述】:

我创建一个节点列表如下:

name <- c("Joe","Frank","Peter")
city <- c("New York","Detroit","Maimi")
age <- c(24,55,65)
node_list <- data.frame(name,age,city)

node_list    
   name age     city
1   Joe  24 New York
2 Frank  55  Detroit
3 Peter  65    Maimi

然后我创建一个边缘列表如下:

from <- c("Joe","Frank","Peter","Albert")
to <- c("Frank","Albert","James","Tony")
to_city <- c("Detroit","St. Louis","New York","Carson City")
edge_list <- data.frame(from,to,to_city)

edge_list
    from     to     to_city
1    Joe  Frank     Detroit
2  Frank Albert   St. Louis
3  Peter  James    New York
4 Albert   Tony Carson City

请注意,节点列表和边列表中的名称不会 100% 重叠。我想创建一个包含所有名称的主节点列表,同时捕获城市信息。这是我的 dplyr 尝试这样做:

new_node <- edge_list %>%
  gather("from_to", "name", from, to) %>%
  distinct(name) %>%
  full_join(node_list)

new_node
  name age     city
1    Joe  24 New York
2  Frank  55  Detroit
3  Peter  65    Maimi
4 Albert  NA     <NA>
5  James  NA     <NA>
6   Tony  NA     <NA>

我需要弄清楚如何添加 to_city 信息。我需要在我的 dplyr 代码中添加什么来实现这一点?谢谢。

【问题讨论】:

  • 如果有多个边从同一个节点开始,主列表会是什么样子?那可能吗?如果我理解正确,你可以做一个left_join(new_node, edge_list, by = c('name' = 'from')
  • 是的,一个节点可以有多个边。左连接没有按预期工作。

标签: r dplyr


【解决方案1】:

加入两次,一次在to 上,一次在from 上,不相关的列被删除:

library(dplyr)

node_list <- data_frame(name = c("Joe", "Frank", "Peter"),
                        city = c("New York", "Detroit", "Maimi"),
                        age = c(24, 55, 65))

edge_list <- data_frame(from = c("Joe", "Frank", "Peter", "Albert"),
                        to = c("Frank", "Albert", "James", "Tony"),
                        to_city = c("Detroit", "St. Louis", "New York", "Carson City"))

node_list %>% 
    full_join(select(edge_list, name = to, city = to_city)) %>% 
    full_join(select(edge_list, name = from))
#> Joining, by = c("name", "city")
#> Joining, by = "name"
#> # A tibble: 6 x 3
#>   name   city          age
#>   <chr>  <chr>       <dbl>
#> 1 Joe    New York      24.
#> 2 Frank  Detroit       55.
#> 3 Peter  Maimi         65.
#> 4 Albert St. Louis     NA 
#> 5 James  New York      NA 
#> 6 Tony   Carson City   NA

在这种情况下,第二个连接不会做任何事情,因为每个人都已被包含在内,但它会插入仅存在于 from 列中的任何人。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-08-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-07
    • 1970-01-01
    • 2020-12-10
    相关资源
    最近更新 更多