如何在R中对年份季度列(time)按时间先后排序
按季度时间顺序排序data.table数据集
针对你提供的time列格式为T1/YYYY(T1-T4代表季度)的data.table数据集,以下两种方法可以实现从过去到现在的时间排序:
方法一:拆分年份和季度字段排序
这种方法无需额外依赖包,直接通过拆分time列提取年份和季度信息,再按这两个字段排序:
library(data.table) # 加载你的数据集 dt <- structure(list(time = c("T2/2023", "T1/2023", "T4/2022", "T3/2022", "T2/2022", "T1/2022"), PIB = c(73050L, 71798L, 68247L, 68652L, 67968L, 65843L), `Valor afegit brut` = c(67426L, 66399L, 64218L, 63228L, 62436L, 60339L), Agricultura = c(756L, 689L, 384L, 404L, 405L, 429L), Indústria = c(13281L, 13172L, 12710L, 12715L, 12557L, 12204L), Construcció = c(3112L, 3030L, 2872L, 2832L, 2788L, 2736L), Serveis = c(50277L, 49508L, 48252L, 47276L, 46686L, 44970L ), `Comerç, transport i hostaleria` = c(17737L, 17301L, 16455L, 16009L, 15959L, 15007L), `Act. immobiliàries, professionals i altres` = c(22085L, 21974L, 21768L, 21269L, 20820L, 20210L), `Adm. pública, educació, sanitat i serveis socials` = c(10455L, 10233L, 10030L, 9998L, 9908L, 9753L), `Impostos nets sobre productes` = c(5624L, 5399L, 4028L, 5424L, 5532L, 5504L)), row.names = c(NA, -6L), class = c("data.table", "data.frame")) # 拆分time列,提取季度和年份 dt[, c("quarter", "year") := tstrsplit(time, "/")] dt[, quarter := as.integer(sub("T", "", quarter))] dt[, year := as.integer(year)] # 按年份、季度升序排序(从过去到现在) dt_sorted <- dt[order(year, quarter)] # 可选:删除临时生成的quarter和year列 dt_sorted[, c("quarter", "year") := NULL]
方法二:使用zoo包转换为季度时间对象排序
借助zoo包的as.yearqtr函数,可以直接将time列转换为可排序的季度时间类型:
library(data.table) library(zoo) # 加载数据集(同方法一) dt <- structure(list(time = c("T2/2023", "T1/2023", "T4/2022", "T3/2022", "T2/2022", "T1/2022"), PIB = c(73050L, 71798L, 68247L, 68652L, 67968L, 65843L), `Valor afegit brut` = c(67426L, 66399L, 64218L, 63228L, 62436L, 60339L), Agricultura = c(756L, 689L, 384L, 404L, 405L, 429L), Indústria = c(13281L, 13172L, 12710L, 12715L, 12557L, 12204L), Construcció = c(3112L, 3030L, 2872L, 2832L, 2788L, 2736L), Serveis = c(50277L, 49508L, 48252L, 47276L, 46686L, 44970L ), `Comerç, transport i hostaleria` = c(17737L, 17301L, 16455L, 16009L, 15959L, 15007L), `Act. immobiliàries, professionals i altres` = c(22085L, 21974L, 21768L, 21269L, 20820L, 20210L), `Adm. pública, educació, sanitat i serveis socials` = c(10455L, 10233L, 10030L, 9998L, 9908L, 9753L), `Impostos nets sobre productes` = c(5624L, 5399L, 4028L, 5424L, 5532L, 5504L)), row.names = c(NA, -6L), class = c("data.table", "data.frame")) # 将time列转换为yearqtr格式 dt[, time_qtr := as.yearqtr(time, format = "T%q/%Y")] # 按转换后的季度时间升序排序 dt_sorted <- dt[order(time_qtr)] # 可选:删除临时生成的time_qtr列 dt_sorted[, time_qtr := NULL]
两种方法最终都会得到按T1/2022 → T2/2022 → T3/2022 → T4/2022 → T1/2023 → T2/2023顺序排列的数据集。
内容的提问来源于stack exchange,提问作者Maria
相关产品推荐
相关产品推荐

