从R中的数据框(或矩阵)中找到前n个最大值

时间:2019-06-03 01:36:36

标签: r

我有一个如下数据框:

Name: /physical_device:GPU:0   Type: GPU
Name: /physical_device:GPU:1   Type: GPU

如何从此数据框中找到n个最大值? 我们可以轻松地从向量中找到前n个。有什么好的方法可以从数据帧中找到前n个?   非常感谢。

3 个答案:

答案 0 :(得分:1)

也许您可以检查stack

N=2
sort(stack(df)$values, decreasing=TRUE)[1:N]
[1] 10.884644  9.912067

答案 1 :(得分:0)

<!--START OF MAP--> <div class="mymap col-lg-8 col-md-12 col-sm-12"> <!--START OF DROPDOWN--> <div class="search-options"> <div class="dropdown"> <select class="select-box"> <option>North Island</option> <option>South Island</option> </select> </div> <div class="radio-buttons"> <form> <input class="radio" type="radio" name="option" value="track" checked> Track<br> <input class="radio" type="radio" name="option" value="Hut"> Hut<br> <input class="radio" type="radio" name="option" value="Campsite"> Campsite<br> </form> </div> </div> <!--END OF DROPDOWN--> <!--START OF LEAFLET MAP--> <div id="mapContainer"></div> <!--END OF LEAFLET MAP--> </div> 并将其转换为向量,unlist并找到最大值。因此,对于前两个值,我们可以做到

sort

如果是矩阵,则不需要tail(sort(unlist(df, use.names = FALSE)), 2) #[1] 9.581705 9.591726

unlist

数据

tail(sort(as.matrix(df)), 2)

答案 2 :(得分:0)

您可以使用tidyr::gather()dplyr::top_n()

首先使用gather(key, value)收集一列中的每一列,然后使用top_n()过滤前n个元素。例如top-5。

library(tidyverse) # dplyr and tidyr
set.seed(10)
mydf <- 
  data.frame(a = runif(10,0,10),
            b = runif(10,1,10),
            c = runif(10,0,12))

gather()中,自由指定keyvalue的名称。

您应将wt中的top_n()命名为您提供的value

mydf %>% 
  gather(key = "key", value = "value") %>% 
  top_n(5, wt = value) %>% 
  arrange(desc(value)) # sort by value
#>   key value
#> 1   c 10.38
#> 2   c 10.06
#> 3   c  9.30
#> 4   c  9.25
#> 5   b  8.53

您可以使用对应的列名获取top_n值的输出。


但是,如果只需要值,则可以使用unlist()

unlist(mydf) %>% # optionally, use.names = FALSE
  sort(decreasing = TRUE) %>% 
  .[1:5]
#>    c1    c7    c3    c9   b10 
#> 10.38 10.06  9.30  9.25  8.53