7

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

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

如何创建一个新的数据框,它是dfc不扩展的组合df

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

谢谢!

4

3 回答 3

13

至于我最简单的方法是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
于 2016-01-20T12:57:17.783 回答
7

当您的数据框每行超过两列时,这可能无法扩展,但您可以只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
于 2012-11-28T01:15:03.243 回答
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)))
于 2012-11-28T01:37:10.023 回答