2014-11-15 5 views
0

Предположим, у меня есть таблица, где строки содержат измерения объектов («A», «B», «C», «D») со временем (от t1 до t5).Определить силу и место изменения в последовательности

mat <- as.data.frame(matrix(c(0,0,0,3,0,0,3,0,0,0, 
           1,0,0,0,0,0,0,0,0,1), 
        nrow = c(4,5), byrow=TRUE)) 
colnames(mat) <- c("t1","t2","t3","t4","t5") 
rownames(mat) <- c("A","B","C","D"); mat 

Таблица выглядит следующим образом:

t1 t2 t3 t4 t5 
A 0 0 0 3 0 
B 0 3 0 0 0 
C 1 0 0 0 0 
D 0 0 0 0 1 

Как я могу генерировать два новых столбец - один содержащих максимального значения, а второй, содержащую имени столбца с этим значением?

Я должен выглядеть следующим образом:

t1 t2 t3 t4 t5 strength time 
A 0 0 0 3 0   3 t4 
B 0 3 0 0 0   3 t2 
C 1 0 0 0 0   1 t1 
D 0 0 0 0 1   1 t5 

Я надеюсь, что это достаточно воспроизводимый пример.

ответ

2

Попробуйте

indx <- max.col(mat) 
cbind(mat, strength=mat[cbind(1:nrow(mat), indx)], 
        time=names(mat)[indx]) 

# t1 t2 t3 t4 t5 strength time 
#A 0 0 0 3 0  3 t4 
#B 0 3 0 0 0  3 t2 
#C 1 0 0 0 0  1 t1 
#D 0 0 0 0 1  1 t5 
+1

Избили меня к нему. +1 для 'max.col' –

+0

@Richard Scriven Спасибо – akrun