为 R 中数据 2 中的每个 id 重复数据帧 1

问题描述

我有两个数据框:

df1 看起来像 2273780 个其他 ID:

id 
XIZ92
DA8J0

df2 看起来像 29435 个其他 Comr :

Comr
9868
9875
1234

我想要一个 df3,它为每个 ID 复制所有 Comr,如下所示:

id       Comr
XIZ92    9868
XIZ92    9875
XIZ92    1234
DA8J0    9868
DA8J0    9875
DA8J0    1234

我确信有一个简单的方法,但找不到我的方法。谢谢!

解决方法

两个选项:

  1. base::merge

    merge(dat1,dat2,by = NULL)
    #      id COMR
    # 1 XIZ92 9868
    # 2 DA8J0 9868
    # 3 XIZ92 9875
    # 4 DA8J0 9875
    # 5 XIZ92 1234
    # 6 DA8J0 1234
    

    即使任一帧中有多个列,这也是如此。

    (这不适用于 data.table 对象,因为 data.table::merge.data.table 需要非空的 by 参数。)

  2. expand.grid

    do.call(expand.grid,c(dat1,dat2))
    #      id COMR
    # 1 XIZ92 9868
    # 2 DA8J0 9868
    # 3 XIZ92 9875
    # 4 DA8J0 9875
    # 5 XIZ92 1234
    # 6 DA8J0 1234
    

    只要每一帧中只有一列就可以工作;如果有两列或更多列,这将不必要地爆炸。试试吧!

    dat2$ign <- 1
    nrow(do.call(expand.grid,dat2)))
    # [1] 18                             # expecting 6