以下の場所、日、および数量のデータ フレームを使用して、各日にわたって場所ごとに数量の組み合わせを作成するソリューションを探しています。本番環境では、これらの組み合わせがかなり大きくなる可能性があるため、data.table または plyr のアプローチをお勧めします。
library(gtools)
dat <- data.frame(Loc = c(51,51,51,51,51), Day = c("Mon","Mon","Tue","Tue","Wed"),
Qty = c(1,2,3,4,5))
この例の出力は次のようになります。
Loc Day Qty
1 51 Mon 1
2 51 Tue 3
3 51 Wed 5
4 51 Mon 1
5 51 Tue 4
6 51 Wed 5
7 51 Mon 2
8 51 Tue 3
9 51 Wed 5
10 51 Mon 2
11 51 Tue 4
12 51 Wed 5
私はいくつかのネストされたラップリーを試してみましたが、次のステップに進み、各ストア内で combn() 関数を使用する方法がわかりません。
lapply(split(dat, dat$Loc), function(x) {
lapply(split(x, x$Day), function(y) {
y$Qty
})
})
各 Store > Day グループが独自のリストにある場合、正しい組み合わせを取得できますが、分割適用結合メソッドを使用してデータ フレームから取得する方法に苦労しています。
loc51_mon <- c(1,2)
loc51_tue <- c(3,4)
loc51_wed <- c(5)
unlist(lapply(loc51_mon, function(x) {
lapply(loc51_tue, function(y) {
lapply(loc51_wed, function(z) {
combn(c(x,y,z), 3)
})
})
}), recursive = FALSE)
[[1]]
[[1]][[1]]
[,1]
[1,] 1
[2,] 3
[3,] 5
[[2]]
[[2]][[1]]
[,1]
[1,] 1
[2,] 4
[3,] 5
[[3]]
[[3]][[1]]
[,1]
[1,] 2
[2,] 3
[3,] 5
[[4]]
[[4]][[1]]
[,1]
[1,] 2
[2,] 4
[3,] 5