【问题标题】:Sorting Column of dates in RR中的日期列排序
【发布时间】:2019-04-14 15:07:07
【问题描述】:

我有一个带有日期列的数据框。这些日期表示特定民意调查结果实际取得的日期。但是,该网站获取这些结果并将其添加到不一定在投票日期的表格中。比如:

  • 20/01/2018
  • 21/01/2018
  • 20/01/2018
  • 19/01/2018

所以顶部的日期(2018 年 1 月 20 日)在下面的日期之后。但是下面的民意调查显示 21 日,这就是进行民意调查的日期,所以上面可能添加的最早日期是 21 日,因此列表变成了;

  • 21/01/2018
  • 21/01/2018
  • 20/01/2018
  • 19/01/2018

现在我的专栏已排序。我需要为 50 个变量执行此操作!建议? 我想对我的日期列进行排序,这样如果我从列的底部到顶部,如果一个日期在它下面有一个更晚的日期,那么那个日期也会变成那个更晚的日期。 enter image description here

【问题讨论】:

  • 您可以运行str(the_name_of_your_data_frame) 并将输出粘贴到答案中吗? (如果您的编辑器无法执行 4 空格缩进,我可以将其设为代码块)
  • 'data.frame':574 obs。 5 个变量: $ Poll : chr "NBC News/Wall St. JrnlNBC/WSJ" "CNNCNN" "Rasmussen ReportsRasmussen" "GallupGallup" ... $ Approve : num 46 41 50 40 44 40 44 41 44 45 ... $不赞成:num 52 57 49 54 52 53 52 53 56 54 ... $ Spread : chr "-6" "-16" "+1" "-14" ... $ Date : POSIXct, format: "2018-11 -03" "2018-11-03" ... >
  • 运行dput(the_name_of_your_data) 要好得多。这种方式更容易复制
  • @ConorNeilson 我在这个问题的已删除版本中建议了这一点。
  • 所以,Date 是一个实际的 POSIXct 日期。 name_of_your_df <- name_of_your_df[order(name_of_your_df$Date),]

标签: r sorting date


【解决方案1】:

也许有更漂亮的方法,但这应该会给出所需的输出:

data$Date <- as.POSIXct(rev(cummax(rev(as.numeric(data$Date)))), origin = "1970-01-01")

这个想法是您希望从下向上滚动最大值,例如,一旦达到2018-01-02,上面的行不能有一个比2018-01-02“小”的日期。这是由cummax 函数完成的。它带有达到的最大日期并覆盖更早/更小的日期。由于您希望它自下而上,您必须通过rev 反转您的日期列,然后在您调用cummax 后将其反转回来。因为cummax 仅适用于numeric 输入,所以我将您的日期列转换为数字,最后又转换回date。

【讨论】:

  • 等下搞笑了哈哈
  • 你的输出是什么?您是否将 date 更改为您的数据框的名称?
  • 是的,我明白了,我必须说明时区。非常感谢!
猜你喜欢
  • 1970-01-01
  • 2015-06-16
  • 1970-01-01
  • 2022-01-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-09-27
相关资源
最近更新 更多