Я бы хотел отсортировать df так, чтобы строки появлялись в порядке вектора.Я пробовал это здесь , но он возвращает 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 в соответствии с df $ CHROM, чтобы строки были в следующем порядке:
# 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 в том порядке, в котором я хочу, но это кажется немного длинным, неэффективным.Я уверен, что есть быстрое решение?