R 融化数据框排名

R melted dataframe rank

我有一个看起来像这样的数据框:

> head(female.meth.ordered)
        Var1                                     Var2      value RankMeth
1 cg25296477 ES__WA09_passage39_Female____87.1429.1.1 0.85581970        1
2 cg01003813 ES__WA09_passage39_Female____87.1429.1.1 0.91677790        1
3 cg13176022 ES__WA09_passage39_Female____87.1429.1.1 0.04714496        1
4 cg26484667 ES__WA09_passage39_Female____87.1429.1.1 0.85785770        1
5 cg21028156 ES__WA09_passage39_Female____87.1429.1.1 0.04065772        1
6 cg11503671 ES__WA09_passage39_Female____87.1429.1.1 0.82933710        1

此数据框有 606528 行。 Var2 行包含 54 个唯一的样本名称。

> unique(female.meth.ordered$Var2)

[1] ES__WA09_passage39_Female____87.1429.1.1                   
 [2] ES__WA09_passage39_Female____87.1429.2.1                   
 [3] ES__MEL4_passage35_Female____127.378.3.1                   
 [4] ES__CSC14_passage29_Female____197.1296.1.2                 
 [5] ES__CM6_passage19_Female____244.622.1.1                    
 [6] ES__HES2_passage105_Female____32.135.4.1  
54 Levels: ES.parthenote__LLC15_passage45_Female____317.905.1.1 ...

我想为 "RankMeth" 列中的前 10 个唯一命中分配 1 的等级 "Var2" 列。然后为 "Var2" 列中接下来的 10 个唯一命中分配 "RankMeth" 列的等级 2。以此类推排名 3、4、5。

最简单的解决方案可能是:

方法:

取唯一 Var2 并用 row_number 除以 10 进行排名。这将使 Var21-10 组中排名。说它是 meth_rank

加入 meth_rank 与 'female.meth.orderedto find out correspondingMethRank` 的行。

meth_rank <- unique(female.meth.ordered$Var2) %>% as.data.frame() %>% 
     mutate(RankMeth = ceiling(row_number()/10))

colnames(meth_rank) <- c("Var2", "RankMeth")
#Join meth_rank with female.meth.ordered to populate rank.
female.meth.ordered %>% 
  select(-RankMeth) %>%
  inner_join(meth_rank, by="Var2") 
#Result will be generated with headings as
# Var1        Var2      value RankMeth