2014-12-21 2 views
2

Например, я получил набор данных с 3 уровнями, а именно 1,2,3
a и b два 3 * 5 матриц, как показано ниже:Как подобрать результат функции tapply в вектор длины длины?

a <- matrix(c(0.1,0.2,0.3,0.3,0.2,0.1,0.1,0.2,0.3,0.3,0.2,0.1,0.1,0.2,0.3),3) 

#  [,1] [,2] [,3] [,4] [,5] 
#[1,] 0.1 0.3 0.1 0.3 0.1 
#[2,] 0.2 0.2 0.2 0.2 0.2 
#[3,] 0.3 0.1 0.3 0.1 0.3 

b <- matrix(rep(c(1,2,3,1),c(5,6,2,2)),nrow=3,byrow=TRUE) 

#  [,1] [,2] [,3] [,4] [,5] 
#[1,] 1 1 1 1 1 
#[2,] 2 2 2 2 2 
#[3,] 2 3 3 1 1 

z4 <- tapply(a[,4],as.factor(b[,4]),mean) 
z4 

    1 2 
0.2 0.2 

В этом примере выход только имеет 2 уровня, я хочу для хранения z4 в векторе с 3 элементами, т. е. (0.2,0.2,0) с 3 уровнями показывает 0.

Как я мог это сделать? Для простоты не используйте любую петлевую структуру.

+2

Привет, добро пожаловать на SO. Поскольку вы новичок здесь, вы можете прочитать [**, как сделать отличный воспроизводимый пример **] (http://stackoverflow.com/q/5963269/1478381) и соответствующим образом обновить свой вопрос. –

+2

В отсутствие воспроизводимого кода, возможно, вы хотите: 'tapply (a [, 4], factor (b [, 4], levels = 1: 3), mean)'? – thelatemail

+0

@thelatemail точно, спасибо u! –

ответ

1

Вы можете попробовать

> z4 <- tapply(a[,4], factor(b[,4], levels = c(1, 2, 3)), mean) 
> z4[is.na(z4)] <- 0 
> z4 
    1 2 3 
0.2 0.2 0.0 
+0

Что было опубликовано в комментариях 19 часов назад –