我需要根据其列名称对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
答案 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))
。