1
與市,條件和訂單號的數據幀開始使用,我試圖通過市&條件來創建訂單數的Ñ可能的組合([1],[2] ,[3],[1] & [2],[1] & [3],[2] & [3],[1] & [2] & [3])。創建n個組合While循環中的R
library(gtools)
set.seed(123)
dat <- data.frame(City = c(rep("St. Louis", 3), rep("Chicago", 2)),
Condition = c(rep("A", 3), rep("B", 2)),
Order.No = round(runif(5,10,100),0))
的開裂市&條件:
dat_groups <- lapply(split(dat, list(dat$City, dat$Condition)), function(x) {
x$Order.No
})
> dat_groups
$Chicago.A
numeric(0)
$`St. Louis.A`
[1] 36 81 47
$Chicago.B
[1] 89 95
$`St. Louis.B`
numeric(0)
我能夠使用while()循環使用「combn」作爲我的ň容器親近的組合解決方案,但是我無法以可接受的格式將輸出保存到列表對象。
combn <- 4
counter <- 0
while (counter <= combn) {
counter <- counter + 1
temp <- lapply(dat_groups, function(x) {
n_obs <- length(x)
if(n_obs == 0) {
NA
}
if(n_obs > 0 & n_obs >= counter) {
combinations(n_obs, counter, x)
} else {
NA
}
})
print(temp)
}
$Chicago.A
[1] NA
$`St. Louis.A`
[,1]
[1,] 36
[2,] 47
[3,] 81
$Chicago.B
[,1]
[1,] 89
[2,] 95
$`St. Louis.B`
[1] NA
$Chicago.A
[1] NA
$`St. Louis.A`
[,1] [,2]
[1,] 36 47
[2,] 36 81
[3,] 47 81
$Chicago.B
[,1] [,2]
[1,] 89 95
$`St. Louis.B`
[1] NA
$Chicago.A
[1] NA
$`St. Louis.A`
[,1] [,2] [,3]
[1,] 36 47 81
...............
truncated
上面的代碼通過列出所有的單個組合的靠攏,然後雙打其次是三元每個城市&條件,但我無法弄清楚如何去除港定居,關閉孔,然後保存到如下所示的列表對象。
所需的最終解決方案應該如下所示:
[[1]]
[1] "36"
[[2]]
[1] "81"
[[3]]
[1] "47"
[[4]]
[1] "36" "81"
[[5]]
[1] "36" "47"
[[6]]
[1] "81" "47"
[[7]]
[1] "36" "81" "47"
[[8]]
[1] "89"
[[9]]
[1] "95"
[[10]]
[1] "89" "95"
感謝您抽出一看,你可以提供任何幫助。列表中的條件:
感謝您回覆@jeremycg。不會使用n()總是導致爲每個城市/條件組使用所有訂單號碼?這是我的問題的核心。我需要能夠設置變量n並將其應用於每個組,而不管每個組有多少個訂單號。即第一組有15個訂單號碼,n = 2,所以我只想看到所有1:2組合,而不是1:15組合。 – Brian
當然,在這種情況下,可以將'n()'換成你想要的數字,或者用'function(numberofrepeats)....將函數全部包裝到函數中,並用你的函數替換這兩個'n()'變量 – jeremycg
對不起,我對goup_by不熟悉,所以我在如何將代碼包裝到另一個函數中掙扎。我很確定它必須在函數()中,但有些if()else條件,因爲如果給定組的Orders數少於_n_,它將會彈出。 – Brian