根据名称R对列进行排序

时间:2018-09-05 22:39:10

标签: r dataframe

我需要根据其列名称对R中的以下data.frame进行排序:

L1 L10 L11 L12           L13       L14 L15        L16          L17 L18 L19 L2 L20 L21        L22 L23 L24         L25
1  1.00000000   0   0   0  0.000000e+00 0.0000000   0 0.00000000 0.000000e+00   0   0  0   0   0 0.00000000   0   0 0.000000000

排序的列必须看起来像:

L1 L2 L10 L11 L12 L13 L14 L15 L16 L17 L18 L19 L20 L21 L22 L23 L24 L25

1 个答案:

答案 0 :(得分:1)

您可以执行sort(names(df)),但问题是L2排在L10之后(字符串的按字母顺序排序)。

我们可以做的一件事是在字符串长度2的前面添加一个空格(左填充),以确保它们在排序时排在前面。

df[order(sprintf("%*s", 3, names(df)))]


  L1 L2 L10 L11 L12 L13 L14 L15 L16 L17 L18 L19 L20 L21 L22 L23 L24 L25
1  1  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0

一个stringr替代项:

df[order(stringr::str_pad(names(df), 3, side = "left", pad = " "))]

PS。

如果变量名较长,则应将3替换为max(nchar(names(df))