R语言里的数据框,约等于表格。比表格多一个要求就是一列只允许一种数据类型的存在。
需求
将数据框最后一列放到第一列的位置,形如:方法一.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
搞定!