сортировать столбцы по именам R - PullRequest
0 голосов
/ 06 сентября 2018

Мне нужно отсортировать следующий data.frame в R по имени его столбца:

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 голосов
/ 06 сентября 2018

Вы можете сделать 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)).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...