Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/joomla/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 根据包含日期的名称对列进行排序_R_Dplyr_Lubridate - Fatal编程技术网

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)])]