Как объединить несколько значений столбцов на основе матрицы в R - PullRequest
0 голосов
/ 12 октября 2019

У меня есть матрица двоичных значений, которые я хочу использовать для возврата различных подмножеств значений из вектора.

Кажется, это было бы просто, но я ничего не могу сделать, чтобы получить желаемый результат

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

Результат, который я хочу получить:

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

Пожалуйста, помогите!

Ответы [ 2 ]

1 голос
/ 12 октября 2019
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 голосов
/ 12 октября 2019

Вот еще один подход, который преобразует 0 и 1 в FALSE и TRUE для подмножества colnames:

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

[1] "b,c" "b,d" "a"   "c"   
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...