首页 > 解决方案 > 从指定行中的最大值到最小值对数据集中的列进行排序

问题描述

假设我有一个数据集:

library(data.table)

dat1<-data.table(id=c(111,111,111,222,222,222), year=c(1995,1996,1997,1995,1996,1997), value=c(4,5,1,2,6,7))

如何根据第 1 行(或任意行)中值的大小对数据集的列进行排序。

我希望我的输出是:

dat2<-data.table(value=c(4,5,1,2,6,7),id=c(111,111,111,222,222,222), year=c(1995,1996,1997,1995,1996,1997)

因为在 dat1 第 1 行中,值 4 是使“dat1$value”第 1 列的最小值,id 111 是使“dat1$id”第 2 列的第二最小值,而 1995 年是使“dat1$year”第 3 列的最大值。

标签: rdata-manipulation

解决方案


你可以做setcolorder

setcolorder(dat1, names(dat1)[order(dat1[1])])
dat1
   value  id year
1:     4 111 1995
2:     5 111 1996
3:     1 111 1997
4:     2 222 1995
5:     6 222 1996
6:     7 222 1997

方法二

dat1 = dat1[,names(dat1)[order(dat1[1,])],with=F]
   value  id year
1:     4 111 1995
2:     5 111 1996
3:     1 111 1997
4:     2 222 1995
5:     6 222 1996
6:     7 222 1997

由 RonakShah 推荐

dat1[, order(dat1[1, ]), with = FALSE]

推荐阅读