tapp с упорядоченным множителем

Когда факторный уровень отсутствует, вы можете использовать таблицу следующим образом:

marks <- c(1,5,3,4,5,6)
table(ordered(marks,levels=1:6))

который вернет таблицу с уровнем «2», указанным с нулевой частотой.

Если бы существовал набор «баллов», связанных с «оценками», и не было отсутствующих уровней (здесь 2), tapply можно было бы использовать для получения суммы баллов для каждого уровня.

tapply(scores,marks,sum)

Можно ли адаптировать tapply к случаю «отсутствующих» уровней факторов? Или есть лучший способ?


person ma-d    schedule 21.11.2012    source источник
comment
кстати, это будет работать и с factor, и с ordered. Ключевым моментом является явное указание уровней.   -  person Ben Bolker    schedule 21.11.2012


Ответы (1)


Идея состоит в том, чтобы эмулировать поведение функции table.

Во-первых, я генерирую вектор оценок, scores ‹-sample(1:6)

затем в 2 шага:

  1. нажмите, чтобы получить баллы с NA по пропущенным значениям. Здесь я использую функцию суммирования, как табличную функцию, но мы можем использовать любую пользовательскую функцию (max, min,..)

     res <- tapply( scores , ordered(marks,levels=1:6),function(x) {sum(x)} )
    
  2. Затем просто замените отсутствующие значения

     res[is.na(res)] <- 0
    
person agstudy    schedule 21.11.2012