如何基于R中的矩阵连接多个列值

如何基于R中的矩阵连接多个列值,r,R,我有一个二进制值矩阵,我想用它从向量返回不同的值子集 这看起来很简单,但我不能做任何事情来产生期望的结果 G <- as.matrix(data.frame(a=c(0,0,1,0),b=c(1,1,0,0),c=c(1,0,0,1),d=c(0,1,0,0))) c <- colnames(G) > G a b c d [1,] 0 1 1 0 [2,] 0 1 0 1 [3,] 1 0 0 0 [4,] 0 0 1 0 请帮忙 sapply(1:nrow(G),

我有一个二进制值矩阵,我想用它从向量返回不同的值子集

这看起来很简单,但我不能做任何事情来产生期望的结果

G <- as.matrix(data.frame(a=c(0,0,1,0),b=c(1,1,0,0),c=c(1,0,0,1),d=c(0,1,0,0)))
c <- colnames(G)
> G
     a b c d
[1,] 0 1 1 0
[2,] 0 1 0 1
[3,] 1 0 0 0
[4,] 0 0 1 0
请帮忙

sapply(1:nrow(G), function(i) toString(names(G[i, G[i,] == 1])))
#OR
with(data.frame(which(G == 1, arr.ind = TRUE)),
     unname(sapply(split(colnames(G)[col], row), toString)))
#[1] "b, c" "b, d" "a"    "c"
如果您有更新版本的R,您也可以这样做

sapply(asplit(G, 1), function(x) toString(names(x)[x == 1]))

下面是另一种将0和1转换为
FALSE
TRUE
以子集
colnames
的方法:

apply(G, 1, function(x) paste(c[as.logical(x)], collapse = ','))

[1] "b,c" "b,d" "a"   "c"   

谢谢,这太棒了。
apply(G, 1, function(x) paste(c[as.logical(x)], collapse = ','))

[1] "b,c" "b,d" "a"   "c"