Вы могли бы сделать что-то вроде этого:
r <- reshape(d,varying=list(colnames(d)),direction='long',
v.names='value',times=colnames(d),timevar='colname')
res <- by(r,r$value,FUN=function(x){unique(x$colname)})
> res
r$value: a
[1] "G1" "G3"
------------------------------------------------------------
r$value: b
[1] "G1" "G2" "G3"
------------------------------------------------------------
r$value: c
[1] "G1" "G2"
------------------------------------------------------------
r$value: d
[1] "G2"
------------------------------------------------------------
r$value: f
[1] "G3"
В основном res
список, содержащий для каждой буквы, вектор имен столбцов, где появляется буква, например:
res$a : 'G1', 'G3'
res$b : 'G1', 'G2', 'G3'
...
Если вы хотите только количество вхождений, вы можете сделать что-то вроде этого:
> lapply(res,length)
$a
[1] 2
$b
[1] 3
$c
[1] 2
$d
[1] 1
$f
[1] 1
EDIT:
Чтобы написать res
на файл, один из способов может быть следующий: текст
# prepare the table (data.frame) to be written
dF <- do.call(rbind.data.frame, lapply(res,function(x){list(Occur=length(x),Columns=paste(x,collapse=' '))}))
dF <- cbind(Letter=row.names(dF),dF)
# write the table to file
write.table(dF,row.names=FALSE,sep=',',file='myfile.csv')
Файл:
"Letter","Occur","Columns"
"a",2,"G1 G3"
"b",3,"G1 G2 G3"
"c",2,"G1 G2"
"d",1,"G2"
"f",1,"G3"
спасибо vinux! Оно работает!! – Elb