按任意指定顺序重新排序R中的列名[重复]

Posted

技术标签:

【中文标题】按任意指定顺序重新排序R中的列名[重复]【英文标题】:Reorder column names in R by arbitrary specified order [duplicate] 【发布时间】:2012-01-11 02:12:34 【问题描述】:

可能重复:How to sort a dataframe by column(s) in R

这是数据集:

odervect <- c("xaf", "c3a", "c3b", "ka101","jk12", "cd101", "kl01v", "klm1")
odervect
[1] "xaf" "c3a"   "c3b"   "ka101" "jk12"  "cd101" "kl01v" "klm1"  

dfd <- data.frame(ka101 = 101:110,c3a = 1:10, kl01v = 301:310, xaf = 11:20,
    c3b = 41:50, cd101 = 61:70)


 dfd 

   ka101 c3a kl01v xaf c3b cd101
1    101   1   301  11  41    61
2    102   2   302  12  42    62
3    103   3   303  13  43    63
4    104   4   304  14  44    64
5    105   5   305  15  45    65
6    106   6   306  16  46    66
7    107   7   307  17  47    67
8    108   8   308  18  48    68
9    109   9   309  19  49    69
10   110  10   310  20  50    70

期望的输出:

 dfd1 <- data.frame(xaf = 11:20, c3a = 1:10, c3b = 41:50,ka101 = 101:110, cd101 = 61:70,
     ka101v = 301:310)
    dfd1 
        xaf c3a c3b ka101 cd101 ka101v
1   11   1  41   101    61    301
2   12   2  42   102    62    302
3   13   3  43   103    63    303
4   14   4  44   104    64    304
5   15   5  45   105    65    305
6   16   6  46   106    66    306
7   17   7  47   107    67    307
8   18   8  48   108    68    308
9   19   9  49   109    69    309
10  20  10  50   110    70    310

请注意,dfd 中并非顺序向量中的所有名称都存在,但只需对匹配的名称进行排序即可。

【问题讨论】:

+1 完美表达的问题!通过定义输入数据、有效的简化数据生成代码以及所需的输出。很高兴解决! 差不多,但不完全。你的脚注说你的意图是 odervect 包含两个额外的条目(“jk12”,“klm1”),它们不会出现在 dfd 的 colnames 中?这使我们无法简单地做dfd[, odervect] 这实际上不是重复的,因为它询问如何按照用户指定的任意顺序重新排序 df,而不仅仅是 order(...) 返回的某种排序顺序跨度> 【参考方案1】:

这个怎么样?它首先使用%in% 选择(仍按顺序)odervect 中与dfd 中存在的列名相对应的字符串:

cnames <- odervect[odervect %in% names(dfd)]
dfd[cnames]
   xaf c3a c3b ka101 cd101 kl01v
1   11   1  41   101    61   301
2   12   2  42   102    62   302
3   13   3  43   103    63   303
4   14   4  44   104    64   304
5   15   5  45   105    65   305
6   16   6  46   106    66   306
7   17   7  47   107    67   307
8   18   8  48   108    68   308
9   19   9  49   109    69   309
10  20  10  50   110    70   310

【讨论】:

以上是关于按任意指定顺序重新排序R中的列名[重复]的主要内容,如果未能解决你的问题,请参考以下文章

根据列名重新排序熊猫数据框中的列[重复]

根据列名重新排序熊猫数据框中的列[重复]

根据列名重新排序熊猫数据框中的列[重复]

R中的重新排序和重塑列[重复]

重新排序数据框中的因子水平[重复]

按字母顺序对表格中的列名进行排序