【问题标题】:repeat dataframe 1 for each id in data 2 in R [duplicate]为 R 中数据 2 中的每个 id 重复数据帧 1 [重复]
【发布时间】:2021-09-12 15:45:24
【问题描述】:

我有两个数据框:

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

我确信这是一种简单的方法,但我找不到解决方法。谢谢!

【问题讨论】:

  • 也许试试expand.grid?但是有了这么多的 ID,您将拥有数十亿行。 (2273780*29435 = 66,928,714,300)
  • @zx8754 猜猜我的电脑为什么会崩溃!
  • @zx8754 好的,现在我已经成功地分离了我的数据,它工作得很好。谢谢!

标签: r database dataframe panel replicate


【解决方案1】:

两种选择:

  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, c(dat1, dat2)))
    # [1] 18                             # expecting 6
    

【讨论】:

  • 谢谢。是的,我有多个列,每次都会使我的 R 会话崩溃
  • 好的,现在我已经成功地分离了我的数据,它工作得很好。谢谢!
猜你喜欢
  • 2020-12-03
  • 2019-06-22
  • 2019-11-16
  • 2015-08-11
  • 2019-01-16
  • 1970-01-01
  • 2018-12-14
  • 1970-01-01
相关资源
最近更新 更多