R中每行前3个值

R中每行前3个值,r,dataframe,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个值的列表列 library(purrr) library(dplyr) df1 %>% mutate(top3 = se

我的数据帧设置为:

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个值的
列表

library(purrr)
library(dplyr)
df1 %>%
    mutate(top3 = select(., -ID) %>% pmap(~ head(sort(-c(...)), 3)))

如果我们想使用
top\n
,一个选项是将格式改为“long”

library(tidyr)
df1 %>% 
    pivot_longer(cols = -ID) %>%
    group_by(ID) %>%
    top_n(3, value)

如果是按行,那么我们可以使用
apply

t(apply(df1[-1], 1, function(x) head(sort(-x), 3)))

或者使用
pmap
返回每行3个值的
列表

library(purrr)
library(dplyr)
df1 %>%
    mutate(top3 = select(., -ID) %>% pmap(~ head(sort(-c(...)), 3)))

如果我们想使用
top\n
,一个选项是将格式改为“long”

library(tidyr)
df1 %>% 
    pivot_longer(cols = -ID) %>%
    group_by(ID) %>%
    top_n(3, value)

使用
data.table
可以将数据重塑为长格式,并按组(“ID”)选择三个最大值

库(data.table)

df_long带有
数据。表格
您可以将数据重塑为长格式,并按组(“ID”)选择三个最大值

库(data.table)
德福朗