среднее число строк, в которых имя строки одинаково (матрица в R) - PullRequest
0 голосов
/ 09 октября 2019

У меня есть большая матрица, например:

 m:
     0   60   120   180... (column names) 
  0  2    4    5     9
  0  6    8    7     6
  0  5    2    6     4
  0  3    4    1     3
 60  4    5    3     1
 60  4    6    10    2
  .
  .
(row names)  

Я хотел бы вычислить среднее значение для строк с тем же именем. Как я могу сделать это в R? Результат будет выглядеть следующим образом:

k:
     0   60   120   180... (column names) 
  0  4   4,5  4,75  5,5
 60  4   5,5  6,5   1,5         
  .
  .
(row names)  

Полагаю, это действительно просто, но я просто не могу понять. Буду признателен за небольшую помощь. Спасибо!

1 Ответ

1 голос
/ 09 октября 2019

Вот один вариант с aggregate из base R

aggregate(m, list(row.names(m)), mean)
#  Group.1 0  60  120 180
#1       0 4 4.5 4.75 5.5
#2      60 4 5.5 6.50 1.5

Или с использованием tapply

tapply(m, list(row.names(m)[row(m)], colnames(m)[col(m)]), FUN = mean)

Или с использованием by

do.call(rbind, by(m, row.names(m), FUN = colMeans))
#    0  60  120 180
#0  4 4.5 4.75 5.5
#60 4 5.5 6.50 1.5

Или с split

t(sapply(split(as.data.frame(m), row.names(m)), colMeans))

data

m <- structure(c(2, 6, 5, 3, 4, 4, 4, 8, 2, 4, 5, 6, 5, 7, 6, 1, 3, 
10, 9, 6, 4, 3, 1, 2), .Dim = c(6L, 4L), .Dimnames = list(c("0", 
"0", "0", "0", "60", "60"), c("0", "60", "120", "180")))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...