如何基于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"