码迷,mamicode.com
首页 > 编程语言 > 详细

R语言 选取某一行的最大值

时间:2017-02-20 23:39:48      阅读:7447      评论:0      收藏:0      [点我收藏+]

标签:r max row function

可以先自定义函数,也可以用的时候再定义。


> mat <- matrix(c(1:3,7:9,4:6), byrow = T, nc = 3)
> mat
     [,1] [,2] [,3]
[1,]    1    2    3
[2,]    7    8    9
[3,]    4    5    6


> apply(mat, 2, function(x){order(x, decreasing=T)[1]})   # 查找每一列
[1] 2 2 2

> apply(mat, 1, function(x){order(x, decreasing=T)[1]})   # 查找每一行
[1] 3 3 3
> apply(mat, 1, function(x){which.max(x)})                # 查找每一行
[1] 3 3 3


> n <- letters[1:5]
> n
[1] "a" "b" "c" "d" "e"

> t <- apply(mat, 1, function(x){which.max(x)})
> n[t]
[1] "c" "c" "c"


另一个例子:

MaxVar <- function(x, na.rm = FALSE) {
  ## compute `max`
  maxx <- max(x, na.rm = na.rm)
  ## which equal the max
  wmax <- which(x == max(x))
  ## how many equal the max
  nmax <- length(wmax)
  ## return
  out <- if(nmax > 1L) {
    c(999, NA)
  } else {
    c(maxx, wmax)
  }
  out
}


And use it like this:

> new <- apply(Mydata[, -1], 1, MaxVar)
> new
     [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
[1,]    3    4  999  999  999    4    4    2    4   999
[2,]    1    4   NA   NA   NA    4    2    3    4    NA

> Mydata <- cbind(Mydata, Max = new[1, ], Var = new[2, ])
> Mydata
   ID X1 X2 X3 X4 Max Var
1   1  3  1  1  1   3   1
2   2  1  2  1  4   4   4
3   3  1  1  1  1 999  NA
4   4  1  3  3  1 999  NA
5   5  2  2  2  1 999  NA
6   6  1  2  3  4   4   4
7   7  2  4  3  3   4   2
8   8  1  1  2  1   2   3
9   9  3  2  1  4   4   4
10 10  4  4  4  4 999  NA


参考: http://stackoverflow.com/questions/29683339/number-of-maximums-in-each-row-and-more/29686201#29686201


本文出自 “R和Python应用” 博客,请务必保留此出处http://matrix6ro.blog.51cto.com/1746429/1899465

R语言 选取某一行的最大值

标签:r max row function

原文地址:http://matrix6ro.blog.51cto.com/1746429/1899465

(2)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!