我知道expand.grid
是創建給定向量的所有組合。但有沒有辦法通過將數據幀中的每一行都作爲唯一的數據來生成數據幀和向量的所有組合。例如,生成數據幀和向量的組合
df <- data.frame(a = 1:3, b = 5:7)
c <- 9:10
如何在不擴大df
創建一個新的數據幀是df
和c
組合:
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
創建一個新的數據幀是df
和c
組合:
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
第一列,然後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)))
至於我最簡單的方法是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
最簡單的答案!謝謝 –
可能是個好主意。謝謝! – Rock