Найдите верхние n самых больших значений из кадра данных (или матрицы) в r - PullRequest
0 голосов
/ 03 июня 2019

У меня есть кадр данных, как показано ниже:

df = data.frame(a = runif(10,0,10),
            b = runif(10,1,10),
            c = runif(10,0,12))

Как мне найти n самых больших значений из этого кадра данных?Мы легко можем найти топ n из вектора.Есть ли какой-нибудь хороший способ найти верхний n из фрейма данных?Большое спасибо.

Ответы [ 3 ]

1 голос
/ 03 июня 2019

Может быть, вы можете проверить на stack

N=2
sort(stack(df)$values, decreasing=TRUE)[1:N]
[1] 10.884644  9.912067
0 голосов
/ 03 июня 2019

Вы можете использовать tidyr::gather() и dplyr::top_n().

Сначала соберите каждый столбец в одном столбце, используя gather(key, value), и отфильтруйте верхние n элементов, используя top_n(). Например, топ-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() свободно указывайте имя key и value.

Вы должны назвать 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
0 голосов
/ 03 июня 2019

unlist и преобразовать его в вектор, sort их и найти верхние значения.Таким образом, для верхних 2 значений мы можем сделать

tail(sort(unlist(df, use.names = FALSE)), 2)
#[1] 9.581705 9.591726

Если это матрица, вам не потребуются unlist

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

данные

set.seed(1233)
df = data.frame(a = runif(10,0,10),
                b = runif(10,1,10),
                c = runif(10,0,12))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...