我需要按月份和年份对数据框的列名称进行排序。排序应按升序排列(最早的月份和年份在前,最近的月份和年份应在末尾。)下面显示的数据框的前3列应保持不变。
asd <- structure(list(Company = "Reliance Industries Limited", Symbol = "RELIANCE",
Var.1 = "Sales +", Mar.2018 = "116,915", Jun.2018 = "128,756",
Sep.2018 = "143,323", Dec.2018 = "156,898", Mar.2019 = "139,590",
Jun.2019 = "157,980", Sep.2019 = "149,302", Dec.2019 = "153,302",
Mar.2020 = "136,492", Jun.2020 = "88,253", Sep.2020 = "111,236",
Dec.2020 = "117,860", Mar.2017 = NA_character_, Dec.2017 = NA_character_,
Mar.2015 = NA_character_, Mar.2008 = NA_character_, Jun.2008 = NA_character_,
Mar.2010 = NA_character_, Jun.2012 = NA_character_, Mar.2009 = NA_character_,
Dec.2011 = NA_character_, Dec.2008 = NA_character_, Dec.2005 = NA_character_,
Dec.2006 = NA_character_, Jun.2010 = NA_character_, Jun.2011 = NA_character_,
Mar.2016 = NA_character_, Mar.2007 = NA_character_, Sep.2005 = NA_character_,
Sep.2008 = NA_character_, Jun.2009 = NA_character_, Sep.2009 = NA_character_,
Sep.2012 = NA_character_, Dec.2012 = NA_character_, Mar.2013 = NA_character_,
Jun.2013 = NA_character_, Sep.2013 = NA_character_, Dec.2013 = NA_character_,
Mar.2014 = NA_character_, Jun.2014 = NA_character_, Sep.2014 = NA_character_,
Dec.2014 = NA_character_, Jun.2005 = NA_character_, Sep.2017 = NA_character_,
Sep.2007 = NA_character_, Dec.2015 = NA_character_, Jun.2007 = NA_character_,
Dec.2009 = NA_character_, Mar.2012 = NA_character_, Dec.2016 = NA_character_,
Mar.2011 = NA_character_, Jun.2015 = NA_character_, Sep.2015 = NA_character_,
Jun.2016 = NA_character_, Sep.2016 = NA_character_, Jun.2017 = NA_character_,
Sep.2010 = NA_character_, Dec.2010 = NA_character_), row.names = 1L, class = "data.frame")
将列名称转换为可以轻松订购的日期对象。
constant_cols <- 1:3
cols_to_sort <- names(asd)[-constant_cols]
cbind(asd[constant_cols],
asd[cols_to_sort[order(as.Date(paste0(cols_to_sort, '.01'), '%b.%Y.%d'))]])
可以使用来将其缩短一点zoo::as.yearmon
。
cbind(asd[constant_cols],
asd[cols_to_sort[order(zoo::as.yearmon(cols_to_sort, '%b.%Y'))]])
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句