如何在R中处理矩阵中的因子

如何在R中处理矩阵中的因子,r,facet,R,Facet,我正在用R调试其他人的代码。我在一个名为seg的矩阵中有数据,如下所示- head(seg) id | chr |开始|结束|测试|参考|位置| log2 102G.bam.vs.ref1.hits | 1 | 100350001 | 101250000 | 986 | 1933 | 100800000 |-0.179835 102G.bam.vs.ref1.hits | 1 | 100800001 | 101700000 | 1104 | 2113 | 101250000 |-0.145205

我正在用R调试其他人的代码。我在一个名为
seg
的矩阵中有数据,如下所示-
head(seg)

id | chr |开始|结束|测试|参考|位置| log2

102G.bam.vs.ref1.hits | 1 | 100350001 | 101250000 | 986 | 1933 | 100800000 |-0.179835 102G.bam.vs.ref1.hits | 1 | 100800001 | 101700000 | 1104 | 2113 | 101250000 |-0.145205 102G.bam.vs.ref1.hits | 1 | 101250001 | 102150000 | 1062 | 1874 | 101700000 |-0.0279899 102G.bam.vs.ref1.hits | 1 | 101700001 | 102600000 | 893 | 1610 | 102150000 |-0.0589814 102G.bam.vs.ref1.hits | 1 | 102150001 | 103050000 | 737 | 1394 | 102600000 |-0.128147

他在绘图中使用了
facet\u grid(id~chr)
,其中一个问题是染色体的顺序不正确,它们按字母顺序排列(这意味着染色体10-19出现在染色体2-9之前,依此类推),chr列的级别顺序错误。
级别(seg$chr)

[1] “1”“10”“11”“12”“13”“14”“15”“16”“17”“18”“19”“2”“20”“21”“22”“3”“4”

[18] “5”“6”“7”“8”“9”“M”“X”“Y”

我试图更改级别的顺序,但当我这样做时,数据也发生了变化,例如,如果我尝试此
levels(seg$chr)=c(22:1,“M”,“X”,“Y”)

head(seg)

id | chr |开始|结束|测试|参考|位置| log2

102G.bam.vs.ref1.hits | 22 | 100350001 | 101250000 | 986 | 1933 | 100800000 |-0.179835 102G.bam.vs.ref1.hits | 22 | 100800001 | 101700000 | 1104 | 2113 | 101250000 |-0.145205 102G.bam.vs.ref1.hits | 22 | 101250001 | 102150000 | 1062 | 1874 | 101700000 |-0.0279899 102G.bam.vs.ref1.hits | 22 | 101700001 | 102600000 | 893 | 1610 | 102150000 |-0.0589814 102G.bam.vs.ref1.hits | 22 | 102150001 | 103050000 | 737 | 1394 | 102600000 |-0.128147

例如,如果我使用
levels(seg$chr)=c(1:22,“M”,“X”,“Y”)
标签将是正确的,但来自第10号染色体的所有数据将涉及第2号染色体

我希望数据保持原样,只改变因子水平的顺序(图的顺序),我可能缺少一些关于如何处理因子的非常基本的东西


谢谢

好吧,我找到了一种避免这种情况的方法,虽然不是很优雅,但它确实有效。 我没有像我那样直接改变因子水平,而是用相同的数据创建了一个新因子,并用它替换了前一个因子

而不是这个-
级别(seg$chr)=c(1:22,“M”,“X”,“Y”)
这改变了因素本身,也改变了数据。 我用过这个-
seg$chr=系数(seg$chr,级别=c(1:22,“M”,“X”,“Y”))
这创造了一个新的因素,使用相同的数据,只是这一次的水平是在赖特顺序

如果有更好的解决办法,我很高兴听到。 :) 谢谢