R - 条件排列
R - Permutations with conditions
我是 R 的新手,我已经搜索了我的问题的答案,但没有成功。
希望你能帮助我。
到目前为止,这是我编写的代码:
#load library
library(gtools)
#the Options
my_list <- c("come_in-blatt-1",
"come_in-blatt-2",
"come_in-front-1",
"come_in-front-2"
)
#get all permutations
result <- permutations(n = 4 , r = 11, v = my_list,repeats.allowed=T)
#save as:
write.csv(result, file = "result-test3.csv")
#open as CSV file
command <- paste("open excel", file = "result-test3.csv")
system(command)
我想查看所有可能的 permutations/combinations,但有一些限制,这就是我迷路的地方。
我需要在 V1 和 V2 中只有“come_in-blatt-1”和“come_in-blatt-2”。
对于所有其他 V3、V4 直到 V11(在本例中 -> r = 11),将只是“come_in-front-1”和“come_in-front-2”。
有没有办法让 R 显示这个?
到目前为止,我已经打开了 Excel 并过滤掉了我不需要的内容,但现在我遇到的问题是列表比 excel 可以处理的要大。 :-/
谢谢。
如果我知道 blatt 选项可以在 V1
或 V2
中,这是一种方法。
#load library
library(gtools)
## Create V1:V2 perms separately from V3:V11
blatts = permutations(n = 2, r = 2, v = c("come_in-blatt-1", "come_in-blatt-2"), repeats.allowed = TRUE)
fronts = permutations(n = 2, r = 9, v = c("come_in-front-1", "come_in-front-2"), repeats.allowed = TRUE)
## Combine the two
## For each row of blatts, repeat the matrix and combine with fronts
res = lapply(seq_len(nrow(blatts)),
function(i){
cbind(blatts[rep(i, nrow(fronts)), ],
fronts)
})
## combine the list into one
res = do.call('rbind', res)
## look at the dim of the resulting matrix
dim(res)
#> [1] 2048 11
## verify the work
all(res[, 1:2] %in% c("come_in-blatt-1", "come_in-blatt-2"))
#> [1] TRUE
all(res[, 3:11] %in% c("come_in-front-1", "come_in-front-2"))
#> [1] TRUE
我是 R 的新手,我已经搜索了我的问题的答案,但没有成功。 希望你能帮助我。
到目前为止,这是我编写的代码:
#load library
library(gtools)
#the Options
my_list <- c("come_in-blatt-1",
"come_in-blatt-2",
"come_in-front-1",
"come_in-front-2"
)
#get all permutations
result <- permutations(n = 4 , r = 11, v = my_list,repeats.allowed=T)
#save as:
write.csv(result, file = "result-test3.csv")
#open as CSV file
command <- paste("open excel", file = "result-test3.csv")
system(command)
我想查看所有可能的 permutations/combinations,但有一些限制,这就是我迷路的地方。 我需要在 V1 和 V2 中只有“come_in-blatt-1”和“come_in-blatt-2”。 对于所有其他 V3、V4 直到 V11(在本例中 -> r = 11),将只是“come_in-front-1”和“come_in-front-2”。
有没有办法让 R 显示这个? 到目前为止,我已经打开了 Excel 并过滤掉了我不需要的内容,但现在我遇到的问题是列表比 excel 可以处理的要大。 :-/
谢谢。
如果我知道 blatt 选项可以在 V1
或 V2
中,这是一种方法。
#load library
library(gtools)
## Create V1:V2 perms separately from V3:V11
blatts = permutations(n = 2, r = 2, v = c("come_in-blatt-1", "come_in-blatt-2"), repeats.allowed = TRUE)
fronts = permutations(n = 2, r = 9, v = c("come_in-front-1", "come_in-front-2"), repeats.allowed = TRUE)
## Combine the two
## For each row of blatts, repeat the matrix and combine with fronts
res = lapply(seq_len(nrow(blatts)),
function(i){
cbind(blatts[rep(i, nrow(fronts)), ],
fronts)
})
## combine the list into one
res = do.call('rbind', res)
## look at the dim of the resulting matrix
dim(res)
#> [1] 2048 11
## verify the work
all(res[, 1:2] %in% c("come_in-blatt-1", "come_in-blatt-2"))
#> [1] TRUE
all(res[, 3:11] %in% c("come_in-front-1", "come_in-front-2"))
#> [1] TRUE