【问题标题】:Converting time variable from character with quarterly frequency以季度频率从字符转换时间变量
【发布时间】:2017-07-14 22:23:45
【问题描述】:

我有一个具有季度频率和 3 个时间变量的数据框,其中 time 是一个字符变量。数据框如下所示

   dt <- structure(list(
  name1          =  c("C","C","C","C","C","C","B","B","B","B","B","B"),
  name2          =  c("D","E","A","D","E","A","D","E","A","D","E","A"),  
  year           =  c(2012, 2012, 2012, 2010, 2010, 2010, 2012, 2012, 2012, 2010, 2010, 2010 ),
  quarter        =  c(4,4,4,1,1,1,4,4,4,1,1,1),
  time           =  c("2012q4", "2012q4","2012q4","2010q1", "2010q1","2010q1","2012q4", "2012q4","2012q4","2010q1", "2010q1","2010q1")),
  .Names         =  c("name1","name2","year", "quarter", "time"),
  row.names      =  c("1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12"), class =("data.frame")) 

我想将 time 设置为我的时间序列变量,并按 name1(按字母顺序)、name2(按字母顺序)和 time(按时间顺序)对数据框进行排序。所需的输出应该是

   dt <- structure(list(
 name1          =  c("B","B","B","B","B","B", "C","C","C","C","C","C"),
 name2          =  c("A", "A", "D", "D", "E", "E","A", "A", "D", "D", "E", "E"),  
 year           =  c(2010,2012,2010,2012,2010,2012,2010,2012,2010,2012,2010,2012),
 quarter        =  c(1,4,1,4,1,4,1,4,1,4,1,4),
 time           =  c("2010q1","2012q4", "2010q1","2012q4","2010q1","2012q4","2010q1","2012q4","2010q1","2012q4","2010q1","2012q4")),
 .Names         =  c("name1","name2","year", "quarter", "time"),
 row.names      =  c("1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12"), class =("data.frame"))

我试过了。

 dt$time <- as.yearqtr(dt$time)
 dt <- dt[order(dt$name1, dt$name2, dt$time),]

提前致谢。

【问题讨论】:

  • 你试过的东西怎么没用?我看到的唯一可能的区别是您的宿舍现在位于 yearqtr 对象而不是字符串中。如果你通过dt$time = format(dt$time,"%Y Q%q") 让他们回到“2012 Q2”格式,那会是你想要的吗?

标签: r dataframe data-manipulation


【解决方案1】:

为什么使用$time 而不是$year$quarter

只要dplyr::arrange(dt, name1, name2, year, quarter)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-03-27
    • 1970-01-01
    • 2020-01-21
    • 1970-01-01
    • 1970-01-01
    • 2017-08-24
    • 1970-01-01
    相关资源
    最近更新 更多