代码之家  ›  专栏  ›  技术社区  ›  aaaaa

展开数据。通过添加新列构建框架

  •  1
  • aaaaa  · 技术社区  · 8 年前

    这里是我的数据示例。框架:

    df = data.frame(x=c(1871:1872))
    df2 = data.frame(y=c(1:3))
    

    如何扩展 df 具有 df2 观察?

    所需输出:

    x     y
    1871  1
    1871  2
    1871  3
    1872  1
    1872  2
    1872  3
    

    我还没有找到任何解决方案。 谢谢

    3 回复  |  直到 8 年前
        1
  •  5
  •   AntoniosK    8 年前

    expand.grid 这就给出了两个变量的所有组合。

    df = data.frame(x=c(1871:1872))
    df2 = data.frame(y=c(1:3))
    
    expand.grid(x = df$x, y = df2$y)
    
    #      x y
    # 1 1871 1
    # 2 1872 1
    # 3 1871 2
    # 4 1872 2
    # 5 1871 3
    # 6 1872 3
    
        2
  •  4
  •   LyzandeR    8 年前

    单向带 lapply :

    do.call(rbind, lapply(df$x, function(z) {
      cbind(z, df2)
    }))
    #     z y
    #1 1871 1
    #2 1871 2
    #3 1871 3
    #4 1872 1
    #5 1872 2
    #6 1872 3
    

    拉普拉 迭代 df$x cbind 这就是全部 df2 到每个元素 df$x . do.call 将所有内容合并到一个数据中。框架

        3
  •  2
  •   Marco Sandri    8 年前

    第三种(但不那么优雅)解决方案:

    data.frame(x=rep(df$x, each=nrow(df2)), 
               y=rep(df2$y,length(unique(df$x)))
    )
    
    #      x y
    # 1 1871 1
    # 2 1871 2
    # 3 1871 3
    # 4 1872 1
    # 5 1872 2
    # 6 1872 3