[英]Finding the Top X percentile of values and combining all values below that percentile into an Others row per Group In R
[英]Top 3 Values Per Row in R
我的 dataframe 設置是:
ID Var1 Var2 Var3... Var50
每行的變量總和為 1。 我一直在嘗試獲得前 3 個變量。
ID 1st 2nd 3rd
按 ID 分組並使用 top_n() 會起作用嗎?
如果是按行,那么我們可以使用apply
t(apply(df1[-1], 1, function(x) head(sort(-x), 3)))
或者使用pmap
返回每行 3 個值的list
列
library(purrr)
library(dplyr)
df1 %>%
mutate(top3 = select(., -ID) %>% pmap(~ head(sort(-c(...)), 3)))
如果我們想使用top_n
,一種選擇是重塑為“長”格式
library(tidyr)
df1 %>%
pivot_longer(cols = -ID) %>%
group_by(ID) %>%
top_n(3, value)
使用data.table
您可以將數據重新整形為長格式, select 按組(“ID”)的三個最大值
library(data.table)
df_long <- melt(df1, id.vars = "ID")[order(ID, desc(value))]
df_long[,.SD[1:3], by = "ID"]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.