Частота векторов-векторов в матрице
Допустим, у меня есть следующие в матрице 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')))