dplyr::使用一列数字因子进行排列

dplyr::使用一列数字因子进行排列,r,dataframe,dplyr,R,Dataframe,Dplyr,我相信这是一个简单的解决办法,但我已经做了一个小时了 DataFrame如下所示: > head(cpgval.filtered) X CpG txpt tss 1 72923 cg15319295 XIST XIST 2 72924 cg03554089 XIST XIST 3 72925 cg12653510 XIST XIST 4 72926 cg05533223 XIST XIST 5 72927 cg11717280 XIST XIST 6 72928

我相信这是一个简单的解决办法,但我已经做了一个小时了

DataFrame如下所示:

> head(cpgval.filtered)
      X        CpG txpt  tss
1 72923 cg15319295 XIST XIST
2 72924 cg03554089 XIST XIST
3 72925 cg12653510 XIST XIST
4 72926 cg05533223 XIST XIST
5 72927 cg11717280 XIST XIST
6 72928 cg20698282 XIST XIST
                                                                                        CellLine      Meth
1 hESCs.cultured.on.mouse.feeder.layer.and.mechanically.passaged.P103.total.DNA.methylation.RepB 0.8141782
2 hESCs.cultured.on.mouse.feeder.layer.and.mechanically.passaged.P103.total.DNA.methylation.RepB 0.9349818
3 hESCs.cultured.on.mouse.feeder.layer.and.mechanically.passaged.P103.total.DNA.methylation.RepB 0.7045790
4 hESCs.cultured.on.mouse.feeder.layer.and.mechanically.passaged.P103.total.DNA.methylation.RepB 0.9728426
5 hESCs.cultured.on.mouse.feeder.layer.and.mechanically.passaged.P103.total.DNA.methylation.RepB 0.8467799
6 hESCs.cultured.on.mouse.feeder.layer.and.mechanically.passaged.P103.total.DNA.methylation.RepB 0.8038316
  OrigOrder                                              CultureConditions GroupNumber         corr      PVal
1         7 hESCs.cultured.on.mouse.feeder.layer.and.mechanically.passaged           1  0.346066701 0.3616219
2         7 hESCs.cultured.on.mouse.feeder.layer.and.mechanically.passaged           1 -0.396517739 0.2907117
3         7 hESCs.cultured.on.mouse.feeder.layer.and.mechanically.passaged           1 -0.337107272 0.3750063
4         7 hESCs.cultured.on.mouse.feeder.layer.and.mechanically.passaged           1  0.063036561 0.8720074
5         7 hESCs.cultured.on.mouse.feeder.layer.and.mechanically.passaged           1 -0.007955937 0.9837932
6         7 hESCs.cultured.on.mouse.feeder.layer.and.mechanically.passaged           1  0.360234098 0.3409356
  Passage
1     103
2     103
3     103
4     103
5     103
6     103
段落栏由8个不同的数字组成:

> unique(cpgval.filtered$Passage)
[1] 103 104 147 161 41  42  5   6  
Levels: 103 104 147 161 41 42 5 6
我想按照段落顺序5,6,41,42103104147161排列数据帧

因此,我呼吁:

cpgval.filtered <- cpgval.filtered %>% dplyr::arrange(as.numeric(Passage))

看起来它是基于第一个数字而不是数字的实际值进行排序的。WTF?

当我们告诉R将字符向量转换为因子时,它会根据字母顺序分配因子级别(因子的基本数字表示)。如果你的字符向量代表实际的数字,事情就会变得混乱。考虑:

factor(1:10)
 [1] 1  2  3  4  5  6  7  8  9  10
Levels: 1 2 3 4 5 6 7 8 9 10

factor(as.character(1:10))
[1] 1  2  3  4  5  6  7  8  9  10
Levels: 1 10 2 3 4 5 6 7 8 9
请注意,在第一种情况下,由于原始数据是数字数据,因此因子级别按预期分配。然而,在第二种情况下,被转换的向量是字符串,其中“1”和“10”首先是“字母顺序”


在你的例子中,我猜
段落
列是作为字符数据而不是数字导入的,而数字又被转换为违反直觉的因子级别

cpgval.filtered$Passage=as.numeric(as.character(cpgval.filtered$Passage))
查看
as.numeric(cpgval.filtered$Passage)
-我想你会感到惊讶的。然后尝试
as.numeric(as.character(cpgval.filtered$Passage))
Wen的评论成功了!谢谢有人能解释一下发生了什么吗?@AlexNesta-你在用一个
因子
-看看
x
factor(1:10)
 [1] 1  2  3  4  5  6  7  8  9  10
Levels: 1 2 3 4 5 6 7 8 9 10

factor(as.character(1:10))
[1] 1  2  3  4  5  6  7  8  9  10
Levels: 1 10 2 3 4 5 6 7 8 9