我的輸入:
df <- data.frame("foo"=1, "bar"=2, "baz"=3, "gaz"=12, "taz"=14, "paz"=4)
我想在第一行和列名中獲得 3 個最高值。因此,我希望得到這樣的事情taz,gaz,paz。
我嘗試pmax,slice_max沒有成功
uj5u.com熱心網友回復:
這是一個選項,apply可以對df.
apply(df, 1, function(x) names(head(sort(x, decreasing = TRUE), 3)))
# [,1]
#[1,] "taz"
#[2,] "gaz"
#[3,] "paz"
如果您需要值和列名,您可以回傳一個串列。
apply(df, 1, function(x) {
x <- head(sort(x, decreasing = TRUE), 3)
list(value = as.numeric(x), name = names(x))
})
#[[1]]
#[[1]]$value
#[1] 14 12 4
#[[1]]$name
#[1] "taz" "gaz" "paz"
uj5u.com熱心網友回復:
如果你的 data.frame 真的只有一行,你可以使用
library(dplyr)
library(tidyr)
df %>%
pivot_longer(everything()) %>%
slice_max(value, n = 3)
這回傳
# A tibble: 3 x 2
name value
<chr> <dbl>
1 taz 14
2 gaz 12
3 paz 4
否則,您要么必須進行一些過濾,要么使用行號與某些分組相結合。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/340030.html
上一篇:R中資料幀中NA值的列印行
