【问题标题】:R: sort df rows according to a vector of different lengthR:根据不同长度的向量对df行进行排序
【发布时间】:2018-04-24 16:21:26
【问题描述】:

我想对 df 进行排序,以便行以向量的顺序出现。我试过这个here,但它返回的 df 行重新标记了与向量中完全相同的行,而不是整个 df 简单地重新排序。

我的 df 是这样的:

> head(df)
     POSITION MEANDEPTH CHROM
1     0:10000         0  chr1
2 10000:20000         0  chr1
3 20000:30000         0  chr1
4 30000:40000         0  chr1
5 40000:50000         0  chr1
6 50000:60000         0  chr1
> tail(df)
                POSITION MEANDEPTH CHROM
308834 57170000:57180000         0  chrY
308835 57180000:57190000         0  chrY
308836 57190000:57200000         0  chrY
308837 57200000:57210000         0  chrY
308838 57210000:57220000         0  chrY
308839 57220000:57230000         0  chrY

> levels(df$CHROM)
 [1] "chr1"  "chr10" "chr11" "chr12" "chr13" "chr14" "chr15" "chr16" "chr17" "chr18" "chr19" "chr2"  "chr20" "chr21" "chr22" "chr3"  "chr4" 
[18] "chr5"  "chr6"  "chr7"  "chr8"  "chr9"  "chrM"  "chrX"  "chrY"

我想根据 df$CHROM 对 df 重新排序,以便行按以下顺序排列:

# RE_ORDER CHROMS
chrom_order <- c('chr1','chr2','chr3','chr4','chr5','chr6','chr7','chr8','chr9','chr10','chr11',
               'chr12','chr13','chr14','chr15','chr16','chr17','chr18','chr19','chr20','chr21','chr22','chrX','chrM')

我试过了:

df <- df[match(chrom_order, df$CHROM),]

但是这些行被重新排序如下:

> head(df)
       POSITION MEANDEPTH CHROM
1       0:10000         0  chr1
128716  0:10000         0  chr2
169134  0:10000         0  chr3
188964  0:10000         0  chr4
207986  0:10000         0  chr5
226140  0:10000         0  chr6

我正在尝试制作 df,以便 chr1 一起出现,然后 chr2、chr3 等出现在向量“chrom_order”中。

我也试过了:

library(dplyr)
df %>%
  slice(match(CHROM, chrom_order))

但这也没有用。我考虑过使用不同的 df$CHROM 值对时间进行子集化,然后按照我想要的顺序重新加入 dfs,但这似乎有点冗长,效率低下。我确定有快速修复?

【问题讨论】:

    标签: r sorting


    【解决方案1】:

    只需设置关卡的顺序:

    df$CHROM = factor(df$CHROM, levels = chrom_order)
    

    然后您可以在此列上对数据框进行排序(级别的顺序现在是因素的一部分)

    df[order(df$CHROM, df$POSITION), ]
    

    旁注:不确定您是否手动输入了所需的订单。如果是这样,您将来可能想要做这样的事情:

    chrom_order = c(paste0("chr", 1:22), "chrX", "chrM")
    

    【讨论】:

    • 这正是我想要的,非常感谢! - 是的,我也确实手动输入过,所以生成矢量的快捷方式的加分点!
    猜你喜欢
    • 2014-04-15
    • 2013-07-21
    • 1970-01-01
    • 1970-01-01
    • 2011-01-23
    • 1970-01-01
    • 2011-05-16
    • 2023-03-19
    • 1970-01-01
    相关资源
    最近更新 更多