Вы можете сделать 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
A stringr
альтернатива:
df[order(stringr::str_pad(names(df), 3, side = "left", pad = " "))]
PS.
Если у вас более длинные имена переменных, 3 следует заменить на max(nchar(names(df))
.