これはおそらく簡単な質問ですが、列をアルファベット順に並べる方法がわかりません。
test = data.frame(C = c(0, 2, 4, 7, 8), A = c(4, 2, 4, 7, 8), B = c(1, 3, 8, 3, 2))
# C A B
# 1 0 4 1
# 2 2 2 3
# 3 4 4 8
# 4 7 7 3
# 5 8 8 2
私は達成するために、アルファベット順に列名で列を並べるのが好きです
# A B C
# 1 4 1 0
# 2 2 3 2
# 3 4 8 4
# 4 7 3 7
# 5 8 2 8
他の人には、自分で定義した順序が必要です:
# B A C
# 1 4 1 0
# 2 2 3 2
# 3 4 8 4
# 4 7 3 7
# 5 8 2 8
私のデータセットは巨大で、10000個の変数があることに注意してください。そのため、プロセスをより自動化する必要があります。
order
でnames
を使用し、それを使用してサブセット化するときに列を順序付けることができます。
test[ , order(names(test))]
A B C
1 4 1 0
2 2 3 2
3 4 8 4
4 7 3 7
5 8 2 8
独自に定義された順序については、名前と順序のマッピングを独自に定義する必要があります。これは、これをどのように行うかによって異なりますが、上記のorder
でこれに対応する関数をスワップすると、目的の出力が得られます。
たとえば、 目的の順序を指定するターゲットベクトルに従ってデータフレームの行を順序付ける を参照できます。つまり、ターゲットに対してmatch
データフレームnames
を使用できます。目的の列順序を含むベクトル。
test = data.frame(C=c(0,2,4, 7, 8), A=c(4,2,4, 7, 8), B=c(1, 3, 8,3,2))
次の単純な関数の置換を使用して実行できます(ただし、データフレームに多くの列がない場合のみ)。
test <- test[, c("A", "B", "C")]
ほかの人のため:
test <- test[, c("B", "A", "C")]
誰かがこれをパイプでやりたい場合の必須のdplyr
答えです。
test %>%
select(sort(names(.)))
test[,sort(names(test))]
列名のソートは簡単に機能します。
前面に1つ以上の列のみが必要で、残りの順序を気にしない場合:
require(dplyr)
test %>%
select(B, everything())
これが、データセットで同様の問題を達成するために見つけたものです。
最初に、ジェームスが上記したこと、つまり.
test[ , order(names(test))]
次に、dplyrのeverything()関数を使用して、データフレームの先頭にある特定の対象列(たとえば、「D」、「G」、「K」)を移動し、それらの列の後にアルファベット順に並べます。
select(test, D, G, K, everything())
もう1つのオプションは、引数numeric = TRUE
を指定して、ライブラリstringrからstr_sort()
を使用することです
str_sort(c("V3", "V1", "V10"), numeric = TRUE)
# [1] V1 V3 V11
上記の他の構文と似ていますが、学習用です-列名でソートできますか?
sort(colnames(test[1:ncol(test)] ))
したがって、特定の列を最初に表示し、残りをアルファベット順に表示するには、この解決策を提案します。
test[, c("myFirstColumn", sort(setdiff(names(test), "myFirstColumn")))]