Ich glaube, das sollten Sie bekommen, was Sie suchen.
# Number of combinations
n <- 6
# Create dataframe of all combinations for 1 and -1 taken n number of times
# For calculations 1 = A and -1 = B
df <- expand.grid(rep(list(c(1,-1)), n))
# Select only rows that have 1 as first value
df <- df[df[,1] == 1,]
# Set first value for all rows as "A"
df[,1] <- "A"
# Set value for first calculation column as 1
df$s <- 1
# Loop through all columns starting with 2
for(i in 2:n){
# Get name of current column
cur.col <- colnames(df)[i]
# Get the difference between the number of 1 and -1 for current column and the running total
df$s2 <- apply(df[,c(cur.col,"s")], 1, sum)
# Remove any rows with a negative value
df <- df[df$s2 >= 0,]
# Set running total to current total
df$s <- df$s2
# Set values for current column
df[,i] <- sapply(as.character(df[,i]), switch, "1" = "A", "-1" = "B")
# Check if current column is last column
if(i == n){
# Only select rows that have a total of zero, indicating that row has a pairs of AB values
df <- df[df$s2 == 0, 1:n]
}
}
# Get vector of combinations
combos <- unname(apply(df[,1:n], 1, paste0, collapse = ""))
Was haben Sie versucht? Kannst du auch mehr erklären? Ich verstehe nicht, was Sie mit "bildet ein Paar" (gleiche Anzahl von As und Bs?) Oder was für ein "nicht gepaart A". Warum sind "ABBA", "BAAB", "BABA", "BBAA" nicht im n = 4 Ausgang enthalten? – Gregor
Total verloren mit der Frage .. – Wen
Diese Frage ist ein bisschen unklar, @mak. Meinst du, dass nur eine bestimmte Anzahl von B's hinzugefügt werden kann, um die gleiche Anzahl von A's zu erhalten, die bereits in der Zeichenkette existieren? –