【问题标题】:R melted dataframe rankR融化的数据帧等级
【发布时间】:2018-02-09 18:17:11
【问题描述】:

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

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

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

【问题讨论】:

  • require(dplyr); female.meth.ordered %>% mutate(RankMeth= as.integer(factor(Var2))) 做你想做的事吗?
  • 这肯定很接近。但是,我只想有 5 个不同的等级。这排名 1-54。 Var2 中的独特命中已经按从小到大排序,所以我真的只需要以 10 个为一组选择它们并分配一个排名。

标签: r dataframe bioinformatics


【解决方案1】:

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

方法:

获取唯一的Var2 并通过将row_number 除以10 进行排名。这将为Var2 提供1-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

【讨论】:

  • 感谢您的回复。同样,这很接近,但最后我的排名 meth 列似乎排名高达 27。
  • 我已经修改了我的解决方案以除以 10。如果你取最新的,那么排名将只达到 6。
  • 等等,我看到你用 /10 编辑了第二行。它完美地工作。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-08-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-08
  • 2017-03-30
  • 2018-04-10
相关资源
最近更新 更多