[英]Identify all possible combinations of a variable, including if values are missing in R
我很好奇人們以“選擇自己的冒險方式”完成培訓的總數
例如,總共有10個不同級別的培訓(即級別1、2 ... 10)。 人們可以完成1:10; 10:1; 1,2,3,5,10; 2,1,3,5,4,6,7,9,8,10; 或在退出測試之前使用所有,部分或全部不使用任何級別的任何組合。
我希望找到一種將這些組合轉換為類別變量的方法,因為我想知道序列是否對用戶通過退出測試的可能性很重要。
我想知道如何在R中執行此操作,但是如果有人可以提供其他創造性的解決方案來提供有關將序列用作變量的更好方法的信息,那么我也非常樂意。
謝謝!
您可能要看一下expand.grid
dat <- expand.grid(1:10, 1:10)
library(tidyr)
unite(dat, perms = Var1, Var2, sep=".")
因為1,2,3與3,2,1不同,所以您要使用排列而非組合。
另外,目標向量的大小應在1到10的范圍內(1,2是可能的解決方案,從不包括3)。
請注意,所有1:10的排列都可能需要一段時間。 超過10可能會增加時間和內存需求。 這是使用3個值的方法。
library(gtools)
library(data.table)
levelnum <- 3
lval <- lapply(1:levelnum, function(x) {
dat <- data.table(permutations(levelnum, x))
setnames(dat, as.character(1:x))})
dval <- rbindlist(lval, use.names = TRUE, fill = TRUE)
結果是:
1 2 3
1: 1 NA NA
2: 2 NA NA
3: 3 NA NA
4: 1 2 NA
5: 1 3 NA
6: 2 1 NA
7: 2 3 NA
8: 3 1 NA
9: 3 2 NA
10: 1 2 3
11: 1 3 2
12: 2 1 3
13: 2 3 1
14: 3 1 2
15: 3 2 1
將levelnum
更改為10會得到9864100行。
1 2 3 4 5 6 7 8 9 10
1: 1 NA NA NA NA NA NA NA NA NA
2: 2 NA NA NA NA NA NA NA NA NA
3: 3 NA NA NA NA NA NA NA NA NA
4: 4 NA NA NA NA NA NA NA NA NA
5: 5 NA NA NA NA NA NA NA NA NA
---
9864096: 10 9 8 7 6 5 4 1 3 2
9864097: 10 9 8 7 6 5 4 2 1 3
9864098: 10 9 8 7 6 5 4 2 3 1
9864099: 10 9 8 7 6 5 4 3 1 2
9864100: 10 9 8 7 6 5 4 3 2 1
運行了幾分鍾。
您可以在Map
使用combn
,然后unlist
列表以獲取所有組合的列表。
res <- Map(combn, 10, 1:10, simplify = FALSE)
unlist(res, recursive = FALSE)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.