2015-10-18 1 views
1

Создать матрицу с (1) индикатор, (2) состояние и (3) переменной интереса хКак использовать функцию apply в столбце фильтрованной матрицы?

z<-rep(1:10,each=10) 
set.seed(974); cond=rbinom(100,3,0.5) 
set.seed(974) ; x=rnorm(100,1,10) 
All<-cbind(z,cond,x) ; All 

Используя весь набор данных можно вычислить количество интереса с colsums или применить. например Среднее на 10 строк.

colSums(matrix(as.numeric(All[,3]), nrow=10))/10 
apply(matrix(as.numeric(All[,3]), nrow=10),2,mean) 

# Filtered dataset. 
AllFiltered<-All[All[,2]==1,] 

Теперь, когда я выполняю фильтрацию, нить не постоянна, например. (1,2,3,3). Есть ли способ выполнить то же действие, что и выше, для каждой отдельной группы фильтрованных данных строк?

Пример Allfiltered

 z cond   x 
[1,] 1 1 -10.5135290 

[2,] 2 1 -10.9883098 
[3,] 2 1 12.9269151 

[4,] 3 1 5.1725988 
[5,] 3 1 -1.5633754 
[6,] 3 1 -1.3470068 

[7,] 4 1 12.6646369 
[8,] 4 1 -9.7694997 
[9,] 4 1 4.8618008 

хотел бы получить среднее для каждой группы строк, где количество строк после фильтрации не является постоянной и равной фиксированным числом (будет меняться в зависимости от состояния фильтр)

+0

Исправленного спасибо! –

+0

Основываясь на nrows каждого блока, вы делаете colMeans на каждые 3 строки? – akrun

+0

Я не понимаю вопроса. Почему вы создали 'AllFiltered' для? Как это связано со средним значением на 10 строк? Как ваш желаемый результат связан со всем этим вместе? –

ответ

1

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

tapply(AllFiltered[,3], AllFiltered[,1], FUN= mean) 
+0

Меня интересует только переменная x и хотел бы вычислить среднее значение для x для каждого отфильтрованного блока до того, как у меня было 10 * 10 строк. После условия я имею в виду (x из трех первых строк), то означает (x из трех следующих строк), тогда означает (x из двух следующих строк). Поэтому количество строк, которые я хочу подвести, не является постоянным. Я хотел бы получить 10 средних значений x (переменная интереса), как и раньше, но на этот раз отфильтрован из-за условия == 1. Спасибо за понимание! –

+0

@ KonstantinosPat Можете ли вы проверить, работает ли это для вас? – akrun

+0

Спасибо вам большое. Я не знал о переменной группировки. gr <- AllFiltered [, 1]; tapply (AllFiltered [, 3], gr, FUN = mean) –

Смежные вопросы