Ini mungkin pertanyaan sederhana, tetapi saya tidak tahu bagaimana mengurutkan kolom menurut abjad.
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
Saya suka mengurutkan kolom dengan nama kolom menurut abjad, untuk dicapai
# A B C
# 1 4 1 0
# 2 2 3 2
# 3 4 8 4
# 4 7 3 7
# 5 8 2 8
Untuk orang lain, saya ingin pesanan saya sendiri:
# B A C
# 1 4 1 0
# 2 2 3 2
# 3 4 8 4
# 4 7 3 7
# 5 8 2 8
Harap dicatat bahwa dataset saya sangat besar, dengan 10.000 variabel. Jadi prosesnya perlu lebih otomatis.
test[ order(names(test)) ]
colnames
: itu berakhir memanggilnames
untukdata.frame
.Inilah
dplyr
jawaban wajib jika seseorang ingin melakukan ini dengan pipa.sumber
test%>%select(b,sort(names(.)))
akan menaruhnya sebagai "b, a, c"test = data.frame(C=c(0,2,4, 7, 8), A=c(4,2,4, 7, 8), B=c(1, 3, 8,3,2))
Menggunakan penggantian fungsi berikut sederhana dapat dilakukan (tetapi hanya jika bingkai data tidak memiliki banyak kolom):
test <- test[, c("A", "B", "C")]
untuk yang lain:
test <- test[, c("B", "A", "C")]
sumber
Urutkan nama kolom dapat bekerja dengan mudah.
sumber
Jika Anda hanya menginginkan satu atau beberapa kolom di depan dan tidak peduli dengan urutan sisanya:
require(dplyr) test %>% select(B, everything())
sumber
Jadi untuk memiliki kolom tertentu yang didahulukan, kemudian sisanya menurut abjad, saya akan mengusulkan solusi ini:
test[, c("myFirstColumn", sort(setdiff(names(test), "myFirstColumn")))]
sumber
Opsi alternatif adalah menggunakan
str_sort()
dari pustaka stringr , dengan argumennumeric = TRUE
. Ini akan mengurutkan kolom dengan benar yang menyertakan angka tidak hanya menurut abjad :str_sort(c("V3", "V1", "V10"), numeric = TRUE)
# [1] V1 V3 V11
sumber
Mirip dengan sintaks lain di atas tetapi untuk pembelajaran - dapatkah Anda mengurutkan berdasarkan nama kolom?
sort(colnames(test[1:ncol(test)] ))
sumber
[1:ncol(test)]
tidak melakukan apa-apa di sini, ini hanya cara menulis yang lebih panjangsort(colnames(test))
.Inilah yang saya temukan untuk mencapai masalah serupa dengan kumpulan data saya.
Pertama, lakukan apa yang Yakobus sebutkan di atas, yaitu
Kedua, gunakan fungsi everything () di dplyr untuk memindahkan kolom tertentu yang menarik (misalnya, "D", "G", "K") di awal bingkai data, meletakkan kolom yang diurutkan menurut abjad setelah yang itu.
sumber