【问题标题】:How to order data to group duplicate values in r? [duplicate]如何对数据进行排序以对 r 中的重复值进行分组? [复制]
【发布时间】:2020-06-29 10:48:38
【问题描述】:

我有一个具有重复 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

输入数据示例:

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

【问题讨论】:

  • 可重现的输入数据与打印的输入数据不匹配。

标签: r dataframe duplicates data.table


【解决方案1】:

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

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))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-11-18
    • 2021-12-09
    • 1970-01-01
    • 2013-07-26
    • 2011-10-28
    • 1970-01-01
    • 2020-05-18
    相关资源
    最近更新 更多