Computing the combinations for presence or absence of a factor in a table
bash, bioinformatics, perl, python
Solution
Assuming that `data` contains your data, this could do the job:
with open("data") as f:
lines=[line.strip().split() for line in f]
combinations={}
for combination in lines[1:]:
key=", ".join([lines[0][i]
for i in xrange(len(combination))
if combination[i] != '0'])
combinations[key]=combinations.setdefault(key, 0)+1
for key, value in combinations.iteritems():
print value, '\t', key
or, using the collections module:
import collections
with open("data") as f:
lines=[line.strip().split() for line in f]
combinations=collections.Counter(
", ".join(lines[0][i]
for i in xrange(len(combination))
if combination[i] != '0')
for combination in lines[1:])
for key, value in combinations.iteritems():
print value, '\t', key
EDIT: Another version saving resources using a generator expression
import collections
with open("data") as f:
lines=(line.strip().split() for line in f)
header=next(lines)
combinations=collections.Counter(
", ".join(header[i]
for i in xrange(len(combination))
if combination[i] != '0')
for combination in lines)
for key, value in combinations.iteritems():
print value, '\t', key
I'm sure this could be improved.
Problem
I have a table like the one below and would like to calculate the different combinations of factors present. example the number of time all are present (1 indicates presence and 0 is for absence). number of time first is absent but rest are present, number of time second is absent but others are present and and also for doubles and triples absent and rest being present. In shell it is quite simple to check the number of time all are present awk '{if (($2 == 1) && ($3==1) && ($4==1) && ($5==1) && ($6==1)) print $1}'ALL_Freq_motif_AE_Uper but the problem is of computing all possible combinations present. the table looks like this: ``` CEBP HEB TAL1 RUNX1 SPI1 1 1 1 1 1 0 1 1 1 1 1 1 0 0 1 1 1 1 1 0 0 0 0 1 1 ``` Now different combination arises from this table 1 combination where all are present. 2 first is absent and all others are present 3 last is absent but others are present 4 third and fourth are absent but others are present 5 first three absent but others are present. In a table like this which has a fixed number of columns and n number of rows, how can I compute these combinations of presence and absence? Kindly help. Thank you