2012-11-28 48 views
4

我知道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 

謝謝!

回答

6

這可能不是縮放當你的數據幀有多於每行兩列,但你可以在使用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 
+0

可能是個好主意。謝謝! – Rock

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))) 
3

至於我最簡單的方法是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 
+0

最簡單的答案!謝謝 –