2015-04-15 6 views
0

Мне нужно рассчитать: a) максимальные и минимальные значения для каждой строки моего набора данных (200 таких строк). b) Каждый столбец соответствует «Jan», «Feb» ... «Dec» (12 столбцов). Таким образом, мне нужно найти месяц, связанный с максимальной и минимальной температурой.Как извлечь значение столбца, соответствующее максимальному значению строки в R?

Для (а) это работает:

i= 1 
    temp.max = NULL 
    for(i in 1:200) 
    { temp.max[i]<- max(temp.data[i,1:12])} 

Может кто-то пожалуйста, помогите мне с (б)?

например. Если набор данных выглядит следующим образом:

Jan Feb Mar Apr May Jun ... Dec 
1  2 3 4 12 6  2 

Максимальное значение равно 12. Мне нужно вывести, что «Май» является соответствующий месяц.

ответ

3

max.col подходит для этого (я только что повторил ваш первый ряд 3 раза, чтобы показать, что он работает для нескольких строк):

names(dat)[max.col(dat,ties.method="first")] 
#[1] "May" "May" "May" 

данные используются:

dat <- setNames(data.frame(matrix(c(1,2,3,4,12,6,2),nrow=1)),month.abb[1:7]) 
dat <- dat[rep(1,3),] 
+0

... но ОП сказал, что им нужно сделать это для фрейма данных с 200 строками ... –

+0

@BenBolker - – thelatemail

+1

cool. Вы узнаете что-то каждый день. Интересно, что нет 'min.col' ... вы просто должны умножаться на -1? –

0
maxvals <- apply(mydata,1,max) 
maxlocs <- colnames(mydata)[apply(mydata,1,which.max)] 

и аналогично для min/which.min

Кстати, ваше решение (а) ставит вас во втором круге Патрик Бернса R Inferno; неэффективность, вероятно, не будет иметь значения в этом приложении, но может вернуться, чтобы укусить вас позже ...

+0

Привет! Код работает. Тем не менее, я не могу выполнять итерацию по 200 строкам, которые у меня есть. Это код: i = 1 temp.max = NULL для (i in 1: 200) {maxvals <- apply (litter [i, 1: 12], 1, max) maxlocs <- colnames (помет [i, 1: 12]) [apply (litter [i, 1: 12], 1, which.max)] } –

+0

вам не нужно это делать 200 раз! Просто 'L <- litter [, 1: 12]; применить (L, 1, max) 'и' colnames (L) [apply (L, 1, which.max)] 'или использовать более эффективный ответ @ thelatemail. –

+0

Привет! Я столкнулся с ошибкой, в которой говорится: «Недействительный индексный тип« Список ». Можете ли вы мне помочь? –

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