Как найти количество раз, когда изменение происходит в матрице, используя R - PullRequest
0 голосов
/ 12 июня 2018

Допустим, у меня есть матрица

 >tmp
       [,1] [,2] [,3]
  [1,]    0    0    3
  [2,]    0    2    0
  [3,]    1    0    0
  [4,]    1    0    0
  [5,]    0    2    0
  [6,]    1    0    0
  [7,]    0    0    3
  [8,]    0    0    3
  [9,]    0    2    0

Теперь я хочу подсчитать количество изменений в матрице, так что, скажем, в первой строке у меня есть 3, а затем в следующей строке она меняется на 2грести и тд.Я хочу добавить эти изменения в таблицу следующим образом:

      1    2    3
  1   1    1    1
  2   2    0    0
  3   0    2    1

Таким образом, говорится, что 1 изменяется на 1, 1 раз.1 меняется на 2, 1 раз.2 изменения в 1, 2 раза и так далее.Я пытался думать об этом в течение некоторого времени, но я не могу придумать умный метод.Я думал об использовании функции table() в R, но я не уверен, как это сделать.У кого-нибудь есть умное решение этой проблемы?

Спасибо!

Ответы [ 2 ]

0 голосов
/ 12 июня 2018
t2 = as.vector(t(tmp))
t2 = t2[t2 != 0]
trans = data.frame(from = t2[-length(t2)], to = t2[-1])
with(trans, table(from, to))
#     to
# from 1 2 3
#    1 1 1 1
#    2 2 0 0
#    3 0 2 1

Можно, конечно, полностью пропустить фрейм данных и перейти к table(from = t2[-length(t2)], to = t2[-1]).


Используя эти данные:

tmp = as.matrix(read.table(text = "      0    0    3
      0    2    0
      1    0    0
      1    0    0
      0    2    0
      1    0    0
      0    0    3
      0    0    3
      0    2    0"))
0 голосов
/ 12 июня 2018
library(zoo)
library(magrittr)

tmp %>% 
  apply(1, function(x) x[x!=0]) %>% # Get non-zero element from each row
  rollapplyr(2, I) %>% # Make matrix whose rows are all 2-windows of above
  {table(from = .[,1], to = .[,2])} # make into table
#     to
# from 1 2 3
#    1 1 1 1
#    2 2 0 0
#    3 0 2 1

Используемые данные

tmp <- data.table::fread("
   a      b   c     d
  [1,]    0    0    3
  [2,]    0    2    0
  [3,]    1    0    0
  [4,]    1    0    0
  [5,]    0    2    0
  [6,]    1    0    0
  [7,]    0    0    3
  [8,]    0    0    3
  [9,]    0    2    0
")[, -'a']
tmp <- as.matrix(tmp)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...