2016-06-30 3 views
0

У меня есть 4 столбца матрицы, называемые штормовыми отчетами, первый столбец является ранжирующим индексом о том, насколько сильна буря, а 3-й столбец - количество отчетов града в шторме. Меня спрашивают найти среднее число градиентных отчетов (столбец 3) с индексом ранжирования более 0,25 (столбец 1). Мне сказали, что я могу использовать какое заявление. Огромное спасибо. Вот пример матрицы:найти среднее значение столбца в матрице с несколькими условиями

образец матрицы:

strm_reports <- matrix(c(0.276, 20, 108, 21, 
0.494, 10, 247, 31, 
0.008, 14, 38, 49, 
0.076, 1, 232, 30, 
0.085, 7, 97, 5), ncol = 4) 

Это то, что я пробовал:

mean_hail<-mean(sum(ifelse(strm_reports[,3] & strm_reports[,1]>0.25,1,0))) 

ответ

0

вы правы, which является путь

mean(strm_reports[which(strm_reports[,1] > .25), 3]) 

Если у вас возникли проблемы с пониманием, вы должны р через приведенный выше код:

which(strm_reports[,1] > .25) #returns row indices for TRUE statements 

#returns only the values from the column we're interested in 
strm_reports[which(strm_reports > .25), 3] 

На самом деле, мы не должны использовать which

strm_reports[,1] > .25 #returns a vector of TRUE and FALSE 
strm_reports[strm_reports[,1] > .25, 3] 
mean(strm_reports[strm_reports[,1] > .25, 3]) 
0

Другой подход с использованием dplyr пакета

filter(strm_reports,strm_reports[,1]>0.25) %>% mutate(Mean_C3 = mean(C3)) 

данных

strm_reports <- matrix(c(0.276, 20, 108, 21, 
0.494, 10, 247, 31, 
0.008, 14, 38, 49, 
0.076, 1, 232, 30, 
0.085, 7, 97, 5), ncol = 4,byrow = TRUE) 
strm_reports <- as.data.frame.matrix(strm_reports) 
colnames(strm_reports) <- paste("C",1:4,sep = "") 
Смежные вопросы