Вы не указали это, но желаемый результат потребует, чтобы мы предположили, что результат на самом деле является прямоугольным.А именно, мы не получаем 3 имен столбцов для a и только 2 имен столбцов для b.
Я думаю, это должно помочь вам начать, по крайней мере:
m <- structure(c(TRUE, FALSE, FALSE, TRUE, TRUE, FALSE, FALSE, TRUE),
.Dim = c(2L, 4L), .Dimnames = list(c("a", "b"), c("10", "20", "30", "40")))
rr <- rownames(m)[row(m)[which(m)]]
cc <- colnames(m)[col(m)[which(m)]]
dd <- data.frame(rr = rr,cc = cc)
dd
, который возвращаетинформация, которую вы хотите, но в более безопасном «длинном» формате, который не захлебнется непрямоугольным корпусом.Оказавшись там, вы можете реорганизовать его так, как вы указали, вот так:
library(plyr)
ddply(dd,.(rr),function(x){ x$cc })
, но, честно говоря, этот последний бит мне кажется действительно уродливым, и я не удивлюсь, если появится лучшее решение, если вы будете ждатьнемного.