【问题标题】:R adding a df with less rows to an existing data frame and show NAR向现有数据框添加行数较少的df并显示NA
【发布时间】:2018-07-25 16:09:38
【问题描述】:

我有一个数据框,比如 df1,看起来像这样:

    ID     
1   ABC
2   ABD
3   ABE
4   ABF
5   ABG
.
. 

我想将一个数据框加入到 df1 中,它的行数少于 df1,如下所示:

    ID     Value1    Value 2
1   ABC      5         6
2   ABD      1         2
3   ABG      4         4
.
.

使最终产品看起来像这样:

    ID     Value1    Value 2
1   ABC      5         6
2   ABD      1         2
3   ABE      NA        NA
4   ABF      NA        NA 
5   ABG      4         4
.
.

我该怎么做呢?提前致谢。

【问题讨论】:

标签: r dataframe merge


【解决方案1】:

试试merge(df1,df2,by = "ID", all = TRUE)

【讨论】:

    【解决方案2】:

    数据

    df1 = data.frame(ID =  c("ABC", "ABD", "ABE", "ABF", "ABG"))
    df2 = data.frame(ID =  c("ABC", "ABD", "ABG"), Value1 = c(5, 4, 1), Value2 = c(6, 2, 4))
    

    解决方案

    merge(df1, df2, all.x = TRUE)
    
    #   ID Value1 Value2
    #1 ABC      5      6
    #2 ABD      4      2
    #3 ABE     NA     NA
    #4 ABF     NA     NA
    #5 ABG      1      4
    

    说明

    阅读?merge,我们看到逻辑参数all.x 完全符合您的要求:

    所有.x

    逻辑;如果为 TRUE,那么额外的行将被添加到输出中,一个用于 x 中与 y 中没有匹配行的每一行。这些行将有 NA 在那些通常用来自 y 的值填充的列中。这 默认为 FALSE,因此只有包含 x 和 y 数据的行才是 包含在输出中。

    【讨论】:

    • 谢谢!但是,有一个错误:无法分配大小为 925.2 Mb 的向量,我假设是因为我的 df 太大(超过 10,000 个条目)。还有什么我可以做的吗?
    • @AlexJohanssen 您的数据太大而无法放入内存,您必须先对其进行排序。不过 10k 条目并没有那么大。
    • 关于如何解决这个问题的任何建议?我运行 gc() 后它仍然没有完成它的任务。
    • @AlexJohanssen 我无法知道为什么会发生在你身上。我建议你在SO上搜索这个问题,如果还没有人问,你自己问吧。
    • 很好的解释
    猜你喜欢
    • 1970-01-01
    • 2022-01-24
    • 2021-11-15
    • 1970-01-01
    • 1970-01-01
    • 2014-11-24
    • 1970-01-01
    • 2014-06-03
    • 1970-01-01
    相关资源
    最近更新 更多