Частота векторов-векторов в матрице

Допустим, у меня есть следующие в матрице 12x3

m<-rbind(c(0,7,0),c(1,1,5),c(6,1,1),c(1,3,-3),c(1,3,-3),c(1,1,5),
c(0,7,0),c(1,1,5),c(1,1,5),-c(0,7,0),c(1,1,5),c(1,3,-3))

и хотел бы подсчитать, сколько раз встречается каждый вектор-строка. Что я делаю?

Я пытался использовать table(), но table() только считает элементы.

3 ответа

Решение

Вы можете преобразовать каждую строку в сцепленную строку и затем использовать таблицу.

m <- apply(m, 1, function(x) paste(x, collapse=" "))
table(m)

m

0 -7 0  0 7 0  1 1 5 1 3 -3  6 1 1 
     1      2      5      3      1 

Вот альтернатива, которая сохраняет исходные данные в виде столбцов. Он использует .N функция из "data.table":

library(data.table)
as.data.table(m)[, .N, by = eval(paste0("V", seq_len(ncol(m))))]
#    V1 V2 V3 N
# 1:  0  7  0 2
# 2:  1  1  5 5
# 3:  6  1  1 1
# 4:  1  3 -3 3
# 5:  0 -7  0 1

Или конвертировать в data.frame и использовать do.call(paste

 table(do.call(paste, as.data.frame(m)))

 #0 -7 0  0 7 0  1 1 5 1 3 -3  6 1 1 
 #    1      2      5      3      1 

Или использовать sprintf

 table(do.call(sprintf, c(as.data.frame(m), '%d %d %d')))
Другие вопросы по тегам