Как я могу изменить порядок определенных столбцов на основе их значений даты? - PullRequest
0 голосов
/ 29 января 2019

У меня есть скрипт, который производит вывод .csv, как это:

enter image description here

Однако есть проблема, которую я выделил: датаИменованные столбцы не всегда находятся в правильном порядке.

Я пытался отсортировать столбцы по имени, но это затрагивает первые три столбца (retailer, department, type), которые имеютчтобы всегда быть в этих первых трех столбцах.Это происходит потому, что они сначала упорядочены по дате, а затем по символьным значениям.

Как изменить порядок столбцов, чтобы первые три столбца остались на месте, а также получить даты в правильном порядке?

ОБНОВЛЕНИЕ:

Я могу заказать столбцы, как это, что является первой частью решения:

sort(names(output))

В этом формате мне теперь нужночтобы переместить последние три столбца в начало (это всегда будет одинаковым для каждого сгенерированного фрейма данных, поэтому все будет в порядке).

Как мне этого добиться?

1 Ответ

0 голосов
/ 29 января 2019

Один из вариантов будет преобразовать в Date класс и затем заказать его

# using a pattern, get the column index
i1 <- grep("^\\d{2}", names(df1))
# sort the extracted the column names after converting to 'Date' class
nm1 <-  names(df1)[i1][order(as.Date(names(df1)[i1], '%d/%m/%Y'))]
# get the names of the other columns
nm2 <- setdiff(names(df1), names(df1)[i1])
# concatenate the columns
df2 <- df1[c(nm2, nm1)]
df2
#    retailer department      type 22/03/2015 15/01/2017 25/07/2018 11/01/2019 12/01/2019
#1        1          a completed          4          1          2          4          1
#2        2          b completed          1          1          2          3          4
#3        3          c completed          5          1          2          2          3

data

df1 <- data.frame(retailer = 1:3, department = letters[1:3], 
 type = 'completed', `11/01/2019` = c(4, 3, 2),
 `12/01/2019` = c(1, 4, 3), `15/01/2017` = 1,
 `25/07/2018` = 2, `22/03/2015` = c(4, 1, 5), check.names = FALSE)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...