如何对数据进行排序以将r中的重复值分组?

如何对数据进行排序以将r中的重复值分组?,r,dataframe,duplicates,data.table,R,Dataframe,Duplicates,Data.table,我有一个具有重复ID的数据集,我试图对数据进行排序,以便重复的行彼此相邻,理想情况下,整个数据集也按ID值从最小到最大排序 例如,我的数据如下所示: Gene ID Gene1 1:1001 Gene1 5:20000 Gene2 5:20000 Gene3 1:1001 Gene4 10:4000 通过将重复项分组,然后理想地保持从最小到最大的id顺序,对预期输出进行排序: Gene ID Gene1 1:1001 Gene3 1

我有一个具有重复ID的数据集,我试图对数据进行排序,以便重复的行彼此相邻,理想情况下,整个数据集也按ID值从最小到最大排序

例如,我的数据如下所示:

Gene     ID 
Gene1    1:1001
Gene1    5:20000
Gene2    5:20000
Gene3    1:1001
Gene4    10:4000
通过将重复项分组,然后理想地保持从最小到最大的id顺序,对预期输出进行排序:

Gene     ID 
Gene1    1:1001
Gene3    1:1001
Gene1    5:20000
Gene2    5:20000
Gene4    10:4000
我一直在尝试这样做,比如:

dfordered <- df[order[duplicated(df$ID)]]
Error: object of type 'closure' is not subsettable

获取冒号前的第一部分,转换为数字,
顺序
数据和子集

df[order(as.numeric(sub(':.*', '', df$ID))), ]

#   Gene      ID
#1 Gene1  1:1001
#4 Gene3  1:1001
#2 Gene1 5:20000
#3 Gene2 5:20000
#5 Gene4 10:4000
gtools::mixedorder默认情况下执行此操作

df[gtools::mixedorder(df$ID), ]
数据

df <- structure(list(Gene = c("Gene1", "Gene1", "Gene2", "Gene3", "Gene4"
), ID = c("1:1001", "5:20000", "5:20000", "1:1001", "10:4000")), 
class = "data.frame", row.names = c(NA, -5L))

df获取冒号前的第一部分,转换为数字,
顺序
数据和子集

df[order(as.numeric(sub(':.*', '', df$ID))), ]

#   Gene      ID
#1 Gene1  1:1001
#4 Gene3  1:1001
#2 Gene1 5:20000
#3 Gene2 5:20000
#5 Gene4 10:4000
gtools::mixedorder默认情况下执行此操作

df[gtools::mixedorder(df$ID), ]
数据

df <- structure(list(Gene = c("Gene1", "Gene1", "Gene2", "Gene3", "Gene4"
), ID = c("1:1001", "5:20000", "5:20000", "1:1001", "10:4000")), 
class = "data.frame", row.names = c(NA, -5L))

df可再现输入数据与打印的输入数据不匹配。感谢您的发现,现已修复可再现输入数据与打印的输入数据不匹配。感谢您的发现,现已修复