Отсортируйте столбец по имени, который содержит дату - PullRequest
1 голос
/ 12 июля 2020

У меня есть следующие данные:

df <- data.frame(id = c(0101, 1011, 2301), flat = c(1, 11, 1), buid = c(1, 10, 23), X2019.12.31.23.59.59 = c(14.123, 12.53, 8.53), X2020.01.31.23.59.59 = c(15.03, 14.63, 9.53), X30.04.2019.23.59 = c(21.03, 17.67, 7.27))

Мне нужно расположить столбцы в порядке даты, указанной в имени столбца.

1 Ответ

2 голосов
/ 12 июля 2020

Общее решение - разделить столбцы даты и столбцы без даты, отсортировать столбцы даты в соответствии с этим ответом и объединить их.

library(lubridate)
date_cols <- grep('X\\d+\\.\\d+\\d+', names(df), value = TRUE)
non_date_cols <- grep('X\\d+\\.\\d+\\d+', names(df), value = TRUE, invert = TRUE)

date_cols <- date_cols[order(as.Date(parse_date_time(sub('^X', '', 
                       date_cols), c('YmdHMS', 'dmyHM'))))]
df[c(non_date_cols, date_cols)]

Чтобы сохранить только уникальные столбцы даты, мы можем сделать:

cols <- as.Date(parse_date_time(sub('^X', '', date_cols), c('YmdHMS', 'dmyHM')))
df[c(non_date_cols, date_cols[!duplicated(cols)])]
...