【问题标题】:R: column binding with unequal number of rowsR:具有不相等行数的列绑定
【发布时间】:2014-11-10 20:54:29
【问题描述】:

我有两个数据集。它们中的每一个都有变量 ID、Block 和 RT(反应时间)。我想合并/列绑定这两组,以便我有一个带有变量的数据集:ID、Block、RT1、RT2。问题是两组中的行数不相等。此外,ID 和块号匹配也很重要。缺失值应替换为 NA。所以我有什么:

head(blok1, 10) 
ID Blok RT1 
1 1 1 592 
2 1 1 468 
3 1 1 530 
4 1 1 546 
5 1 1 452 
6 1 1 483 
7 1 2 499 
8 1 2 452 
9 1 2 608 
10 1 2 530

head(blok2, 10) 
ID Blok RT2 
1 1 1 592 
2 1 1 920 
3 1 1 686 
4 1 1 561 
5 1 1 561 
6 1 2 327 
7 1 2 686 
8 1 2 670 
9 1 2 702 
10 1 3 920

我想拥有什么:

ID Blok RT1 RT2 
1 1 1 592 592 
2 1 1 468 920 
3 1 1 530 686 
4 1 1 546 561 
5 1 1 452 561 
6 1 1 483 NA 
7 1 2 499 327 
8 1 2 452 686 
9 1 2 608 670 
10 1 2 530 702 

等等

【问题讨论】:

    标签: r binding merge


    【解决方案1】:

    这是一个使用 dplyr 的解决方案,也使用索引或唯一 ID:

    blok1 <- data.frame(ID = c(1, 1, 2), RT1 = c(11, 12, 13))
    blok2 <- data.frame(ID = c(1, 2, 2), RT2 = c(21, 22, 23))
    
    library(dplyr)
    
    ## if you want NAs for RT2 only
    blok1 %>%
      mutate(uID = row_number()) %>%
      left_join(blok2 %>% mutate(uID = row_number()), by = c("uID", "ID"))
    # uID ID RT1 RT2
    # 1   1  1  11  21
    # 2   2  1  12  NA
    # 3   3  2  13  23
    
    ## if you want NAs for both RT1 and RT2
    blok1 %>%
      mutate(uID = row_number()) %>%
      outer_join(blok2 %>% mutate(uID = row_number()), by = c("uID", "ID"))
    #    uID ID RT1 RT2
    # 1   1  1  11  21
    # 2   2  1  12  NA
    # 3   3  2  13  23
    # 4   2  2  NA  22
    

    【讨论】:

    • 谢谢!一个简单的问题——outer_join 和 join 一样吗?我不断收到此错误消息,提示找不到 outer_join 函数(我加载了 dplyr 包)。
    • @Ewa 尝试在 github 上安装最新的开发版本:github.com/hadley/dplyr
    猜你喜欢
    • 2018-05-08
    • 2018-07-11
    • 2020-03-05
    • 2015-06-28
    • 2015-07-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多