使用dplyr或tidyverse重新编码因子水平

时间:2018-12-19 02:47:44

标签: r dplyr refactoring tidyverse

我有一张桌子,上面有3个处于不同基因组位点的风险等位基因。最终,我需要为该表设置一个关键字,以识别大量样本中受风险状况影响的不同等位基因的流行程度。我目前有以下风险表的示例:

genomic.stuff <- data.frame(c("A A", "A G", "G A", "G G"), c("T T", "C T", "T C", "C C"),
                        row.names= c("Risk Level 1", "Risk Level 2", "Risk Level 3", "Risk Level 4"),
                        stringsAsFactors = TRUE)
colnames(genomic.stuff) <- c("Gene A", "Gene B")

genomic.stuff
             Gene A Gene B
Risk Level 1    A A    T T
Risk Level 2    A G    C T
Risk Level 3    G A    T C
Risk Level 4    G G    C C

str(genomic.stuff)
'data.frame':   4 obs. of  2 variables:
 $ Gene A: Factor w/ 4 levels "A A","A G","G A",..: 1 2 3 4
 $ Gene B: Factor w/ 4 levels "C C","C T","T C",..: 4 2 3 1

所以我想对此数据帧做两件事。请记住,我有一个包含许多基因的大型映射文件,因此,如果可以在dplyr或tidyverse的整个表格中完成此操作,那将是最好的。

1)我想重新对因素进行加权,以便它们根据风险状态进行排名,而不是根据字母顺序自动进行加权(数据框已经存在,所以我认为我不能在风险级别上做到这一点数据框构造)

2)我想重新分配因子级别,以使风险级别1 = 1,风险级别2 | 3 = 2,风险等级4 = 3。

非常感谢大家的帮助!

1 个答案:

答案 0 :(得分:1)

您将需要制作Risk Level numeric并进行如下重新排序:

编辑:您可以选择重新分类风险级别。

 library(tidyverse)
genomic.stuff <- data.frame(c("A A", "A G", "G A", "G G"), c("T T", "C T", "T C", "C C"),
                            row.names= c("Risk Level 1", "Risk Level 2", "Risk Level 3", "Risk Level 4"),
                            stringsAsFactors = TRUE)
colnames(genomic.stuff) <- c("Gene A", "Gene B")

    new_genome<-genomic.stuff %>% 
      mutate(RiskLevel=as.factor(c(1,2,3,4))) %>% 
      mutate(RiskLevel=as.numeric(c(1,2,2,4)),`Gene A`=fct_reorder(`Gene A`,RiskLevel),
             `Gene B`=fct_reorder(`Gene B`,RiskLevel)) 
    levels(new_genome$RiskLevel)
    levels(as.factor(new_genome$RiskLevel))