I believe that this code accomplishes something close to what you are requesting. The results are stored in the non-zero entries of the matrices "group1" and "group2" by corresponding row, so you may need to alter the code in order to render the results in a form that is useful for your purposes.
The output is shown as it was returned from the R console; the truncated data tables at the end illustrate the form of the output.
# Written in R version 4.1.1
require(data.table)
group1 = matrix(data = 0, nrow = 16384, ncol = 14, byrow = T)
group2 = matrix(data = 0, nrow = 16384, ncol = 14, byrow = T)
a = 1:14
count = 1
for(i in 0:14){
nf = data.frame(combn(a,i))
for(j in 1:dim(nf)[2]){
g1 = c(nf[,j])
if(length(g1) > 0){
group1[count,1:length(g1)] = g1
}
g2 = a[-g1]
if(length(g2) > 0){
group2[count,1:length(g2)] = g2
}
if(i == 0 & j == 1){
group2[count,1:14] = 1:14
}
count = count + 1
}}
data.table(group1)
# V1 V2 V3 V4 V5 V6 V7 V8 V9 V10 V11 V12 V13 V14
# 1: 0 0 0 0 0 0 0 0 0 0 0 0 0 0
# 2: 1 0 0 0 0 0 0 0 0 0 0 0 0 0
# 3: 2 0 0 0 0 0 0 0 0 0 0 0 0 0
# 4: 3 0 0 0 0 0 0 0 0 0 0 0 0 0
# 5: 4 0 0 0 0 0 0 0 0 0 0 0 0 0
# ---
# 16380: 1 2 3 5 6 7 8 9 10 11 12 13 14 0
# 16381: 1 2 4 5 6 7 8 9 10 11 12 13 14 0
# 16382: 1 3 4 5 6 7 8 9 10 11 12 13 14 0
# 16383: 2 3 4 5 6 7 8 9 10 11 12 13 14 0
# 16384: 1 2 3 4 5 6 7 8 9 10 11 12 13 14
data.table(group2)
# V1 V2 V3 V4 V5 V6 V7 V8 V9 V10 V11 V12 V13 V14
# 1: 1 2 3 4 5 6 7 8 9 10 11 12 13 14
# 2: 2 3 4 5 6 7 8 9 10 11 12 13 14 0
# 3: 1 3 4 5 6 7 8 9 10 11 12 13 14 0
# 4: 1 2 4 5 6 7 8 9 10 11 12 13 14 0
# 5: 1 2 3 5 6 7 8 9 10 11 12 13 14 0
# ---
# 16380: 4 0 0 0 0 0 0 0 0 0 0 0 0 0
# 16381: 3 0 0 0 0 0 0 0 0 0 0 0 0 0
# 16382: 2 0 0 0 0 0 0 0 0 0 0 0 0 0
# 16383: 1 0 0 0 0 0 0 0 0 0 0 0 0 0
# 16384: 0 0 0 0 0 0 0 0 0 0 0 0 0 0
print(paste("count = ",count - 1))
# [1] "count = 16384"