2015-04-07 3 views
4

Допустим, я следующий в 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() только считает элементы.

ответ

4

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

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 
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'))) 
2

Вот альтернатива, которая сохраняет исходные данные в виде столбцов. Он использует функцию .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