2011-11-22 33 views
5

Tôi có một khung dữ liệu với các dữ liệu sau:Có điều gì giống như chỉ mục pmax không?

date=strptime(c(20110101,20110102,20110103,20110104,20110105,20110106),'%Y%m%d') 
rate1=c(1,2,3,4,5,6) 
rate2=c(2,1,3,6,8,4) 
rate3=c(4,1,3,6,8,3) 
rate4=c(7,8,9,2,1,8) 
z=data.frame(date,rate1,rate2,rate3,rate4) 
z$max=pmax(rate1,rate2,rate3,rate4) 

Chức năng Pmax cho phép tôi để nhận được giá trị tối đa đối với kỷ lục đó, nhưng tôi đã tự hỏi làm thế nào tôi có thể nhận được các chỉ số của giá trị lớn nhất cho rằng hồ sơ .

đâu z $ max sẽ bằng 7,8,9,6,8,8, tôi muốn có được 5,5,5,3,3,5

Đây có phải là có thể? Tôi biết điều này có vẻ như một cái gì đó đơn giản nhưng tôi không thể tìm thấy câu trả lời bất cứ nơi nào.

Trả lời

3

Rất đơn giản trong cơ sở R:

z$wmax <- apply(z[, -c(1,6)],1, which.max) 

Trên thực tế cung cấp cho bạn 1 ít hơn những gì bạn đã được yêu cầu kể từ khi tôi loại trừ cột đầu tiên nhưng điều đó có thể dễ dàng được khắc phục bằng cách thêm một.

z$max_col_n <- apply(z[, -c(1,6)],1, which.max) +1 
+0

Cảm ơn, cũng hoạt động với which.min sẽ hữu ích! – thequerist

13

Bạn có thể sử dụng max.col:

> z$max = max.col(z[2:5])+1 
> z 
     date rate1 rate2 rate3 rate4 max 
1 2011-01-01  1  2  4  7 5 
2 2011-01-02  2  1  1  8 5 
3 2011-01-03  3  3  3  9 5 
4 2011-01-04  4  6  6  2 3 
5 2011-01-05  5  8  8  1 3 
6 2011-01-06  6  4  3  8 5 

Tôi nghĩ rằng bạn có nghĩa là bạn muốn chỉ số nhưng bạn chỉ sử dụng 4 vectơ đó, vì vậy để tìm thấy những gì bạn muốn, bạn sẽ phải tìm ra chỉ số và sau đó thêm 1.

+0

Cảm ơn, rất đơn giản. – thequerist

+2

Đừng quên xem lại tài liệu vì hàm đó có đối số 'ties.method = c (" random "," first "," last ")' và theo mặc định là sử dụng phương thức 'random'. – Galled

+0

Vâng, tôi đã thấy điều đó, nhưng cảm ơn vì đã chỉ ra điều đó. – thequerist

Các vấn đề liên quan