R 根据包含日期的名称对列进行排序
我有以下数据:R 根据包含日期的名称对列进行排序,r,dplyr,lubridate,R,Dplyr,Lubridate,我有以下数据: df一般的解决方案是将日期列和非日期列分开,根据答案对日期列进行排序,然后将它们组合起来 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[
df一般的解决方案是将日期列和非日期列分开,根据答案对日期列进行排序,然后将它们组合起来
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)]
库(lubridate)
date_cols我喜欢第一种解决方案,但它并不有效。我使用了一个更一般的解决方案。在我对数据进行排序之后,发现有些列(日期)重复了。如何删除它们以保留唯一的数据?您的意思是有同名的列?也许,您可以使用排序
,然后使用唯一
,而不是顺序
,以保持唯一的日期。列名可能不同。对我来说,列名中隐藏的日期(没有时间)很重要。例如:[24]“X2019.11.30.23.59.59”[25]“X30.11.2019.23.59”,但如果具有相同日期的两列具有不同的值,该怎么办?如果只保留一列,您将丢失其中一列中的信息,您将保留哪一列?更有趣的是NA较少的列。但是保持第一列的解决方案也很好。
cols <- as.Date(parse_date_time(sub('^X', '', date_cols), c('YmdHMS', 'dmyHM')))
df[c(non_date_cols, date_cols[!duplicated(cols)])]