`Применить` `Rowmeans` на несколько наборов столбцов

StackOverflow https://stackoverflow.com/questions/20353209

  •  25-08-2022
  •  | 
  •  

Вопрос

Извините, люди, я не вижу леса для деревьев. Я много искал, но не мог найти решение. Я хочу, например, среднее для каждой единицы (потенциально rowMeans) подмножества переменных в матрице (или потенциально данных данных) в R. Анкет Я хотел бы выбрать столбцы, используя вектор индексации, как в tapply, как я позвонил a1 в примере ниже.

> set.seed(23958)
> (dat <- matrix(sample(0:3, 10, replace = TRUE), ncol = 5))
     [,1] [,2] [,3] [,4] [,5]
[1,]    2    3    0    2    1
[2,]    2    1    1    2    1

> set.seed(6112)
> (a1 <- sample(1:2, 5, replace = TRUE))
[1] 1 1 2 2 1

Решение в этом примере должно выглядеть так, но, конечно, я хотел бы сделать это более полным образом. Я думал, что должен использовать функцию из apply Семья, но я не мог выяснить, какой из них.

> cbind(rowMeans(dat[, a1 == 1]), rowMeans(dat[, a1 == 2]))
         [,1] [,2]
[1,] 2.000000  1.0
[2,] 1.333333  1.5
Это было полезно?

Решение

Вы все еще можете использовать tapply здесь:

do.call(rbind,
          tapply(seq_len(ncol(dat)),a1,
           function(i)rowMeans(dat[,i])))

Другие советы

если ты tВыполните свои данные, вы можете использовать by:

t(do.call(rbind,by(t(dat),a1,colMeans)))
          1   2
V1 2.000000 1.0
V2 1.333333 1.5

Вы также можете использовать aggregate Функция:

t(aggregate(t(dat), list(a1), mean))
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top