LoginSignup
0
1

More than 5 years have passed since last update.

データフレームを列の型でソートする

Last updated at Posted at 2017-11-14

こんなデータフレームを

int lgl chr lgl.1 lgl.2 int.1 chr.1 lgl.3 chr.2 chr.3
1 TRUE chr TRUE TRUE 1 chr TRUE chr chr
1 TRUE chr TRUE TRUE 1 chr TRUE chr chr
1 TRUE chr TRUE TRUE 1 chr TRUE chr chr
1 TRUE chr TRUE TRUE 1 chr TRUE chr chr
1 TRUE chr TRUE TRUE 1 chr TRUE chr chr

こうしたい

chr chr.1 lgl lgl.1 lgl.2 lgl.3 int int.1 int.2 int.3
chr chr TRUE TRUE TRUE TRUE 1 1 1 1
chr chr TRUE TRUE TRUE TRUE 1 1 1 1
chr chr TRUE TRUE TRUE TRUE 1 1 1 1
chr chr TRUE TRUE TRUE TRUE 1 1 1 1
chr chr TRUE TRUE TRUE TRUE 1 1 1 1

テストデータの用意


nr <- 5 #テストデータ(data.frame)の行数

d0 <- data.frame( #テストデータの基本構成要素
  int = rep(1, nr), #integer
  chr = rep('chr', nr), #character
  lgl = rep(TRUE, nr), #logical
  stringsAsFactors = FALSE #characterがfactorに変換されることを防ぐ
)
set.seed(123) #乱数の固定
d1 <- d0[sample.int(length(d0), 10, replace = TRUE)] #d0を基に10列のデータフレームを作成

d1 #テストデータ
int lgl chr lgl.1 lgl.2 int.1 chr.1 lgl.3 chr.2 chr.3
1 TRUE chr TRUE TRUE 1 chr TRUE chr chr
1 TRUE chr TRUE TRUE 1 chr TRUE chr chr
1 TRUE chr TRUE TRUE 1 chr TRUE chr chr
1 TRUE chr TRUE TRUE 1 chr TRUE chr chr
1 TRUE chr TRUE TRUE 1 chr TRUE chr chr

列の型順にソート


classes <- sapply(d1, class) #各列の型を入手
d2 <- d1[order(classes)] #ソート

d2
chr chr.1 lgl lgl.1 lgl.2 lgl.3 int int.1 int.2 int.3
chr chr TRUE TRUE TRUE TRUE 1 1 1 1
chr chr TRUE TRUE TRUE TRUE 1 1 1 1
chr chr TRUE TRUE TRUE TRUE 1 1 1 1
chr chr TRUE TRUE TRUE TRUE 1 1 1 1
chr chr TRUE TRUE TRUE TRUE 1 1 1 1

パイプラインでやるなら

library(dplyr)

d1 %>%
  `[`(order(sapply(., class)))


0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1