Não pude deixar de encontrar uma solução para isso. Eu usei o R, porque isso faz sentido. O código está abaixo, e também está disponível neste R-Fiddle
Por favor, observe que o código abaixo tem uma seção para gerar dados simulados. Na prática, você terá que substituir isso pelos dados reais que seriam armazenados em um vetor chamado x
, conforme explicado no código.
Se você não se importa com as observações que não ocorrem, então o código é muito simples:
x <- c("01", "02", "03", "01", "02", "03", "01", "02 ", "03") # your Column A
n <- 3 # number of elements in each combination. configurable.
# create a vector with n-sized sequences of characters. (e.g. n = 3 -> "XX-YY-ZZ")
mydata <- x
for (i in 2:n) {
y <- c(x[-i], x[i])
mydata <- paste(mydata, y, sep="-")
}
# calculate the frequency of each observation and save into data table
frequencies <- data.frame(table(mydata))
head(frequencies)
A saída será algo como:
mydata Freq
1 01-02-02 2
2 01-04-04 2
3 01-05-05 1
4 01-07-07 1
5 01-10-10 1
6 02-02-02 1
Se você se preocupa em mostrar todas as possibilidades, o código está um pouco confuso:
n <- 3 # number of elements in each combination. configurable.
# -----------------------------------------------------------------------------------#
# THIS PART SIMPLY GENERATES MOCK DATA. REPLACE WITH ACTUAL DATA #
# -----------------------------------------------------------------------------------#
universe <- 1:10 # your range of numbers
m <- 100 # number of rows in the mock data
# generate some mock data with a simple m-sized vector of numbers within 'universe'
set.seed(1337) # hardcode random seed so mock data can be reproduced
x <- sample(universe, m, replace=TRUE)
x <- formatC(x, width=nchar(max(universe)), flag=0) # pad our data with 0s as needed
# -----------------------------------------------------------------------------------#
# END OF MOCK DATA PART #
# -----------------------------------------------------------------------------------#
# At this point, you should have a variable x which contains a sequence of
# numbers stored as characters (text) e.g. "01" "04" "10" "04" "06"
# create a vector with n-sized sequences of characters. (e.g. n = 3 -> "XX-YY-ZZ")
mydata <- x
for (i in 2:n) {
y <- c(x[-i], x[i])
mydata <- paste(mydata, y, sep="-")
}
# calculate the frequency of each observation and save into data table
frequencies <- data.frame(table(mydata))
# generate all possible permutations and save them to a data table called
p <- as.matrix(expand.grid(replicate(n, universe, simplify=FALSE)))
p <- formatC(p, width=nchar(max(universe)), flag=0)
q <- apply(p, 1, paste, collapse="-")
permutations <- data.frame(q, stringsAsFactors=FALSE) # broken into separate step for nicer variable name in df
permutations$Freq <- 0 # fill with zeroes
permutations$Freq[match(frequencies$mydata, permutations$q)] <- frequencies$Freq
head(permutations)
A saída será algo como:
q Freq
1 01-01-01 0
2 02-01-01 0
3 03-01-01 2
4 04-01-01 0
5 05-01-01 1
6 06-01-01 0