vlambda博客
学习文章列表

用R语言调整表格列的顺序


用R语言调整表格列的顺序 今天是生信星球陪你的第644天用R语言调整表格列的顺序


   大神一句话,菜鸟跑半年。我不是大神,但我可以缩短你走弯路的半年~

   就像歌儿唱的那样,如果你不知道该往哪儿走,就留在这学点生信好不好~

   这里有豆豆和花花的学习历程,从新手到进阶,生信路上有你有我!

R语言里的数据框,约等于表格。比表格多一个要求就是一列只允许一种数据类型的存在。

需求

将数据框最后一列放到第一列的位置,形如:

image.png

方法一.base包的方法

test = iris
head(test)
##   Sepal.Length Sepal.Width Petal.Length Petal.Width Species
## 1          5.1         3.5          1.4         0.2  setosa
## 2          4.9         3.0          1.4         0.2  setosa
## 3          4.7         3.2          1.3         0.2  setosa
## 4          4.6         3.1          1.5         0.2  setosa
## 5          5.0         3.6          1.4         0.2  setosa
## 6          5.4         3.9          1.7         0.4  setosa
test2 = test[,c(5,1:4)]

如果数据框有80列,你想把第60列和61列提到前面应该怎么做呢?

df = data.frame(matrix(rnorm(80*6),nrow = 6))
df[,1:3]
##           X1         X2         X3
## 1  0.8493610 -1.0447670  0.6882441
## 2  0.9538996  0.9822049 -0.6282098
## 3  0.2937263  0.8887633 -0.1199363
## 4 -0.2405776 -0.3893779  2.7609528
## 5 -1.5878003 -0.1569644  1.1544416
## 6 -0.7833017 -1.8136190  1.0951076
df2 = df[,c(60:61,1:59,62:80)]
df2[,1:3]
##          X60          X61         X1
## 1 -0.1090392 -0.193078784  0.8493610
## 2 -0.5928074 -0.138603477  0.9538996
## 3 -0.6877727  0.402739956  0.2937263
## 4  1.4495643  1.434138642 -0.2405776
## 5 -0.2817918  0.004080908 -1.5878003
## 6 -1.1590534 -2.038439729 -0.7833017

如果要提前的列分散一些,多一些,代码就会写的更复杂。

方法二.dplyr里的select函数

library(dplyr)
test3 = select(test,5,1:4)
head(test3)
##   Species Sepal.Length Sepal.Width Petal.Length Petal.Width
## 1  setosa          5.1         3.5          1.4         0.2
## 2  setosa          4.9         3.0          1.4         0.2
## 3  setosa          4.7         3.2          1.3         0.2
## 4  setosa          4.6         3.1          1.5         0.2
## 5  setosa          5.0         3.6          1.4         0.2
## 6  setosa          5.4         3.9          1.7         0.4

搭配everything()更好用

test4 = select(test,5,everything())
head(test4)
##   Species Sepal.Length Sepal.Width Petal.Length Petal.Width
## 1  setosa          5.1         3.5          1.4         0.2
## 2  setosa          4.9         3.0          1.4         0.2
## 3  setosa          4.7         3.2          1.3         0.2
## 4  setosa          4.6         3.1          1.5         0.2
## 5  setosa          5.0         3.6          1.4         0.2
## 6  setosa          5.4         3.9          1.7         0.4

上面这句代码表示提取第五列,然后将其余列放在后面。

所以刚才80列提取60和61列的代码就可以写为

df3 = select(df,60,61,everything())
df3[,1:3]
##          X60          X61         X1
## 1 -0.1090392 -0.193078784  0.8493610
## 2 -0.5928074 -0.138603477  0.9538996
## 3 -0.6877727  0.402739956  0.2937263
## 4  1.4495643  1.434138642 -0.2405776
## 5 -0.2817918  0.004080908 -1.5878003
## 6 -1.1590534 -2.038439729 -0.7833017

搞定!


插个小广告!