R: найти максимальное значение каждые две строки в каждом столбце - PullRequest
3 голосов
/ 29 марта 2012

Я хочу найти максимальное значение в каждом столбце для каждых 2 строк (скажем). Как это сделать в R? Например

matrix(c(3,1,20,5,4,12,6,2,9,7,8,7), byrow=T, ncol=3) 

Я хочу вывод, подобный этому

matrix(c(5,4,20,7,8,9), byrow=T, ncol=3) 

Ответы [ 4 ]

5 голосов
/ 29 марта 2012

Вот один из способов сделать это.

  1. Определите вектор, который содержит информацию о groups, который вы хотите. В этом случае я использую rep, чтобы повторить последовательность чисел.
  2. Затем определите вспомогательную функцию для вычисления максимума столбца массива - это просто apply из max.
  3. наконец, используйте sapply с анонимной функцией, которая применяет colMax к каждому из ваших подмножеств сгруппированных массивов.

код:

groups <- rep(1:2, each=2)
colMax <- function(x)apply(x, 2, max)
t(
    sapply(unique(groups), function(i)colMax(x[which(groups==i), ]))
)

Результаты:

     [,1] [,2] [,3]
[1,]    5    4   20
[2,]    7    8    9
1 голос
/ 29 марта 2012

Другой вариант,

do.call(rbind, by(m, gl(nrow(m)/2, 2), function(x) apply(x, 2, max)))
1 голос
/ 29 марта 2012

Одна длинная строка:

t(sapply(seq(1,nrow(df1),by=2),function(i) apply(df1[seq(i,1+i),],2,max)))
0 голосов
/ 29 марта 2012
apply(mat, 2, function(x) tapply(x, # work on each column
       # create groups of 2 vector of proper length:  1,1,2,2,3,3,4,4 ....
      rep(1:(length(x)/2), each=2, len=length(x)) 
       max))

  [,1] [,2] [,3]
1    5    4   20
2    7    8    9
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...