【问题标题】:Generate combination of data frame and vector生成数据框和向量的组合
【发布时间】:2012-11-28 01:10:02
【问题描述】:

我知道expand.grid 是创建给定向量的所有组合。但是有没有办法通过将数据帧中的每一行视为唯一来生成数据帧和向量的所有组合。例如,

df <- data.frame(a = 1:3, b = 5:7)
c <- 9:10

如何在不扩展df的情况下创建一个由dfc组合而成的新数据框:

df.c:
a b c
1 5 9
2 6 9
3 7 9
1 5 10
2 6 10
3 7 10

谢谢!

【问题讨论】:

    标签: r


    【解决方案1】:

    对我来说最简单的方法是merge(df, as.data.frame(c))

      a b  c
    1 1 5  9
    2 2 6  9
    3 3 7  9
    4 1 5 10
    5 2 6 10
    6 3 7 10
    

    【讨论】:

    • 最简单的答案!谢谢
    【解决方案2】:

    当您的数据框每行包含多于两列时,这可能无法扩展,但您可以在第一列上使用 expand.grid,然后在第二列上使用 merge

    df <- data.frame(a = 1:3, b = 5:7)
    c <- 9:10
    combined <- expand.grid(a=df$a, c=c)
    combined <- merge(combined, df)
    > combined[order(combined$c), ]
      a  c b
    1 1  9 5
    3 2  9 6
    5 3  9 7
    2 1 10 5
    4 2 10 6
    6 3 10 7
    

    【讨论】:

      【解决方案3】:

      你也可以这样做

      do.call(rbind,lapply(9:10, function(x,d) data.frame(d, c=x), d=df)))
      
      # or using rbindlist as a fast alternative  to do.call(rbind,list)
      library(data.table)
      rbindlist(lapply(9:10, function(x,d) data.frame(d, c=x), d=df)))
      

      rbindlist(Map(data.frame, c = 9:10, MoreArgs = list(a= 1:3,b=5:7)))
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-06-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-01-05
        相关资源
        最近更新 更多