我知道expand.grid
是创建给定向量的所有组合。但是有没有办法通过将数据框中的每一行视为唯一来生成数据框和向量的所有组合。例如,
df <- data.frame(a = 1:3, b = 5:7)
c <- 9:10
如何创建一个新的数据框,它是df
和c
不扩展的组合df
:
df.c:
a b c
1 5 9
2 6 9
3 7 9
1 5 10
2 6 10
3 7 10
谢谢!
我知道expand.grid
是创建给定向量的所有组合。但是有没有办法通过将数据框中的每一行视为唯一来生成数据框和向量的所有组合。例如,
df <- data.frame(a = 1:3, b = 5:7)
c <- 9:10
如何创建一个新的数据框,它是df
和c
不扩展的组合df
:
df.c:
a b c
1 5 9
2 6 9
3 7 9
1 5 10
2 6 10
3 7 10
谢谢!
至于我最简单的方法是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
当您的数据框每行超过两列时,这可能无法扩展,但您可以只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
你也可以做这样的事情
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)))