【问题标题】:dplyr::full_join not working as expecteddplyr::full_join 未按预期工作
【发布时间】:2017-12-26 09:25:29
【问题描述】:

输入是:

x <- data.frame(
   input.number = c(0,1,2,1,1),
   input.layer = c(0.0,0.0,0.0,0.0,0.5),
   output.number = c(1,1,1,1,1),
   output.layer = c(1.0,1.0,1.0,0.5,1.0),
   weights = c(-4.9076530,-2.8328544 ,-0.8687123,-2.8328544,-2.8328544)
)
y <- data.frame(
   input.number = 2,
   input.layer = 0,
   output.number = 1,
   output.layer = 0.5,
   weights = 0
)

当通过运行加入他们时:

dplyr::full_join(x, y, by = c("input.number", "input.layer", "output.number", "output.layer"), suffix = c('','.dupe'))

结果是一个带有重复列的data.frame:

   input.number input.layer output.number output.layer    weights weights.dupe
 1            0         0.0             1          1.0 -4.9076530           NA
 2            1         0.0             1          1.0 -2.8328544           NA
 3            2         0.0             1          1.0 -0.8687123           NA
 4            1         0.0             1          0.5 -2.8328544           NA
 5            1         0.5             1          1.0 -2.8328544           NA
 6            2         0.0             1          0.5         NA            0

由于新行不是骗子,我期待这样的事情:

   input.number input.layer output.number output.layer    weights
 1            0         0.0             1          1.0 -4.9076530           
 2            1         0.0             1          1.0 -2.8328544           
 3            2         0.0             1          1.0 -0.8687123           
 4            1         0.0             1          0.5 -2.8328544           
 5            1         0.5             1          1.0 -2.8328544           
 6            2         0.0             1          0.5         0

【问题讨论】:

    标签: r dataframe dplyr


    【解决方案1】:

    full_join 函数工作正常。但是,看起来 包中的 bind_rows 函数是您正在寻找的,因为 xy 具有相同的列名,并且您想在数据框中添加“新行”。

    dplyr::bind_rows(x, y)
    
    #   input.number input.layer output.number output.layer    weights
    # 1            0         0.0             1          1.0 -4.9076530
    # 2            1         0.0             1          1.0 -2.8328544
    # 3            2         0.0             1          1.0 -0.8687123
    # 4            1         0.0             1          0.5 -2.8328544
    # 5            1         0.5             1          1.0 -2.8328544
    # 6            2         0.0             1          0.5  0.0000000
    

    或者您可以只使用基础 R 中的 rbind 函数。

    rbind(x, y)
    #   input.number input.layer output.number output.layer    weights
    # 1            0         0.0             1          1.0 -4.9076530
    # 2            1         0.0             1          1.0 -2.8328544
    # 3            2         0.0             1          1.0 -0.8687123
    # 4            1         0.0             1          0.5 -2.8328544
    # 5            1         0.5             1          1.0 -2.8328544
    # 6            2         0.0             1          0.5  0.0000000
    

    【讨论】:

    • 上面的答案没有这么说,但是full_join 正在创建一个新列,因为您没有将其指定为合并列,因此在这种情况下的预期行为是创建一个新的 (.dupe) 列。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-06-04
    • 2022-01-24
    • 2015-05-11
    • 2020-05-15
    • 2014-10-31
    • 2018-02-12
    • 2014-01-20
    相关资源
    最近更新 更多