通过char + number命令colnames

时间:2015-07-27 07:09:16

标签: r dataframe

我的数据框有223列。

dput(colnames(a6))
c("d.54", "PRODUCT", "POS", "d.53", "d.52", "d.51", "d.50", "d.49", 
"d.48", "d.47", "d.46", "d.45", "d.44", "d.43", "d.42", "d.41", 
"d.40", "d.39", "d.38", "d.37", "d.36", "d.35", "d.34", "d.33", 
"d.32", "d.31", "d.30", "d.29", "d.28", "d.27", "d.26", "d.25", 
"d.24", "d.23", "d.22", "d.21", "d.20", "d.19", "d.18", "d.17", 
"d.16", "d.15", "d.14", "d.13", "d.12", "d.11", "d.10", "d.9", 
"d.8", "d.7", "d.6", "d.5", "d.4", "d.3", "d.2", "d.1", "d", 
"agr", "n", "s", "n.1", "s.1", "n.2", "s.2", "n.3", "s.3", "n.4", 
"s.4", "n.5", "s.5", "n.6", "s.6", "n.7", "s.7", "n.8", "s.8", 
"n.9", "s.9", "n.10", "s.10", "n.11", "s.11", "n.12", "s.12", 
"n.13", "s.13", "n.14", "s.14", "n.15", "s.15", "n.16", "s.16", 
"n.17", "s.17", "n.18", "s.18", "n.19", "s.19", "n.20", "s.20", 
"n.21", "s.21", "n.22", "s.22", "n.23", "s.23", "n.24", "s.24", 
"n.25", "s.25", "n.26", "s.26", "n.27", "s.27", "n.28", "s.28", 
"n.29", "s.29", "n.30", "s.30", "n.31", "s.31", "n.32", "s.32", 
"n.33", "s.33", "n.34", "s.34", "n.35", "s.35", "n.36", "s.36", 
"n.37", "s.37", "n.38", "s.38", "n.39", "s.39", "n.40", "s.40", 
"n.41", "s.41", "n.42", "s.42", "n.43", "s.43", "n.44", "s.44", 
"n.45", "s.45", "n.46", "s.46", "n.47", "s.47", "n.48", "s.48", 
"n.49", "s.49", "n.50", "s.50", "n.51", "s.51", "n.52", "s.52", 
"n.53", "s.53", "n.54", "s.54", "r.0", "r.1", "r.2", "r.3", "r.4", 
"r.5", "r.6", "r.7", "r.8", "r.9", "r.10", "r.11", "r.12", "r.13", 
"r.14", "r.15", "r.16", "r.17", "r.18", "r.19", "r.20", "r.21", 
"r.22", "r.23", "r.24", "r.25", "r.26", "r.27", "r.28", "r.29", 
"r.30", "r.31", "r.32", "r.33", "r.34", "r.35", "r.36", "r.37", 
"r.38", "r.39", "r.40", "r.41", "r.42", "r.43", "r.44", "r.45", 
"r.46", "r.47", "r.48", "r.49", "r.50", "r.51", "r.52", "r.53", 
"r.54") 

我尝试以这种方式重新排序列

agr d d.1 d.2 --d.54 .... 

按1个字符排序,然后按每个组中的数字排序。 我试试a7=a6[,order(colnames(a6))] 但它只是像char一样排序,得到这样的结果

colnames(a7)
  [1] "agr"     "d"       "d.1"     "d.10"    "d.11"    "d.12"    "d.13"    "d.14"    "d.15"    "d.16"    "d.17"   
 [12] "d.18"    "d.19"    "d.2"     "d.20"    "d.21"

认为这个问题只有答案,但我找不到......

2 个答案:

答案 0 :(得分:5)

您可以使用mixedorder

中的library(gtools)
  library(gtools)
  a6[mixedorder(nm1)]

  head(nm1[mixedorder(nm1)])
  #[1] "agr" "d"   "d.1" "d.2" "d.3" "d.4"

使用另一个例子

  set.seed(24)
  v1 <- sample(paste0(letters[1:4], '.', 1:20))
  mixedsort(v1)
  #[1] "a.1"  "a.5"  "a.9"  "a.13" "a.17" "b.2"  "b.6"  "b.10" "b.14" "b.18"
  #[11] "c.3"  "c.7"  "c.11" "c.15" "c.19" "d.4"  "d.8"  "d.12" "d.16" "d.20"

数据

 nm1 <- colnames(a6)

答案 1 :(得分:2)

a6 <- setNames(do.call(data.frame,as.list(1:223)),c("d.54","PRODUCT","POS","d.53","d.52","d.51","d.50","d.49","d.48","d.47","d.46","d.45","d.44","d.43","d.42","d.41","d.40","d.39","d.38","d.37","d.36","d.35","d.34","d.33","d.32","d.31","d.30","d.29","d.28","d.27","d.26","d.25","d.24","d.23","d.22","d.21","d.20","d.19","d.18","d.17","d.16","d.15","d.14","d.13","d.12","d.11","d.10","d.9","d.8","d.7","d.6","d.5","d.4","d.3","d.2","d.1","d","agr","n","s","n.1","s.1","n.2","s.2","n.3","s.3","n.4","s.4","n.5","s.5","n.6","s.6","n.7","s.7","n.8","s.8","n.9","s.9","n.10","s.10","n.11","s.11","n.12","s.12","n.13","s.13","n.14","s.14","n.15","s.15","n.16","s.16","n.17","s.17","n.18","s.18","n.19","s.19","n.20","s.20","n.21","s.21","n.22","s.22","n.23","s.23","n.24","s.24","n.25","s.25","n.26","s.26","n.27","s.27","n.28","s.28","n.29","s.29","n.30","s.30","n.31","s.31","n.32","s.32","n.33","s.33","n.34","s.34","n.35","s.35","n.36","s.36","n.37","s.37","n.38","s.38","n.39","s.39","n.40","s.40","n.41","s.41","n.42","s.42","n.43","s.43","n.44","s.44","n.45","s.45","n.46","s.46","n.47","s.47","n.48","s.48","n.49","s.49","n.50","s.50","n.51","s.51","n.52","s.52","n.53","s.53","n.54","s.54","r.0","r.1","r.2","r.3","r.4","r.5","r.6","r.7","r.8","r.9","r.10","r.11","r.12","r.13","r.14","r.15","r.16","r.17","r.18","r.19","r.20","r.21","r.22","r.23","r.24","r.25","r.26","r.27","r.28","r.29","r.30","r.31","r.32","r.33","r.34","r.35","r.36","r.37","r.38","r.39","r.40","r.41","r.42","r.43","r.44","r.45","r.46","r.47","r.48","r.49","r.50","r.51","r.52","r.53","r.54"));
names(a6)[do.call(order,c(read.table(text=names(a6),sep='.',fill=T),na.last=F))];
##   [1] "agr"     "d"       "d.1"     "d.2"     "d.3"     "d.4"     "d.5"
##   [8] "d.6"     "d.7"     "d.8"     "d.9"     "d.10"    "d.11"    "d.12"
##  [15] "d.13"    "d.14"    "d.15"    "d.16"    "d.17"    "d.18"    "d.19"
##  [22] "d.20"    "d.21"    "d.22"    "d.23"    "d.24"    "d.25"    "d.26"
##  [29] "d.27"    "d.28"    "d.29"    "d.30"    "d.31"    "d.32"    "d.33"
##  [36] "d.34"    "d.35"    "d.36"    "d.37"    "d.38"    "d.39"    "d.40"
##  [43] "d.41"    "d.42"    "d.43"    "d.44"    "d.45"    "d.46"    "d.47"
##  [50] "d.48"    "d.49"    "d.50"    "d.51"    "d.52"    "d.53"    "d.54"
##  [57] "n"       "n.1"     "n.2"     "n.3"     "n.4"     "n.5"     "n.6"
##  [64] "n.7"     "n.8"     "n.9"     "n.10"    "n.11"    "n.12"    "n.13"
##  [71] "n.14"    "n.15"    "n.16"    "n.17"    "n.18"    "n.19"    "n.20"
##  [78] "n.21"    "n.22"    "n.23"    "n.24"    "n.25"    "n.26"    "n.27"
##  [85] "n.28"    "n.29"    "n.30"    "n.31"    "n.32"    "n.33"    "n.34"
##  [92] "n.35"    "n.36"    "n.37"    "n.38"    "n.39"    "n.40"    "n.41"
##  [99] "n.42"    "n.43"    "n.44"    "n.45"    "n.46"    "n.47"    "n.48"
## [106] "n.49"    "n.50"    "n.51"    "n.52"    "n.53"    "n.54"    "POS"
## [113] "PRODUCT" "r.0"     "r.1"     "r.2"     "r.3"     "r.4"     "r.5"
## [120] "r.6"     "r.7"     "r.8"     "r.9"     "r.10"    "r.11"    "r.12"
## [127] "r.13"    "r.14"    "r.15"    "r.16"    "r.17"    "r.18"    "r.19"
## [134] "r.20"    "r.21"    "r.22"    "r.23"    "r.24"    "r.25"    "r.26"
## [141] "r.27"    "r.28"    "r.29"    "r.30"    "r.31"    "r.32"    "r.33"
## [148] "r.34"    "r.35"    "r.36"    "r.37"    "r.38"    "r.39"    "r.40"
## [155] "r.41"    "r.42"    "r.43"    "r.44"    "r.45"    "r.46"    "r.47"
## [162] "r.48"    "r.49"    "r.50"    "r.51"    "r.52"    "r.53"    "r.54"
## [169] "s"       "s.1"     "s.2"     "s.3"     "s.4"     "s.5"     "s.6"
## [176] "s.7"     "s.8"     "s.9"     "s.10"    "s.11"    "s.12"    "s.13"
## [183] "s.14"    "s.15"    "s.16"    "s.17"    "s.18"    "s.19"    "s.20"
## [190] "s.21"    "s.22"    "s.23"    "s.24"    "s.25"    "s.26"    "s.27"
## [197] "s.28"    "s.29"    "s.30"    "s.31"    "s.32"    "s.33"    "s.34"
## [204] "s.35"    "s.36"    "s.37"    "s.38"    "s.39"    "s.40"    "s.41"
## [211] "s.42"    "s.43"    "s.44"    "s.45"    "s.46"    "s.47"    "s.48"
## [218] "s.49"    "s.50"    "s.51"    "s.52"    "s.53"    "s.54"