【问题标题】:Naming diurnal intervals in R在 R 中命名昼夜间隔
【发布时间】:2018-10-10 14:24:31
【问题描述】:

我正在处理声学遥测数据,并且正在尝试将“小时”列进一步划分为间隔。理想情况下,如果 timeperiod1 介于 00:00:01-06:00:00 等或类似的时间之间,我想说的是“早”。我已经使用 strptime 和 POSIXct 来格式化日期和时间,并将小时数放入他们自己的列中我只是非常坚持创建和命名这个新的“时间段”列,因此我可以运行 ANOVA。
谢谢!

【问题讨论】:

  • 对于未来,如果您可以包含一个示例数据集,人们可以使用它来帮助解决您的问题,那就太好了。查看此常见问题解答以了解如何执行此操作:stackoverflow.com/questions/5963269/…
  • 谢谢,我试图在这里获取几行数据框,但它一直拒绝我的帖子

标签: r datetime intervals lubridate telemetry


【解决方案1】:

lubridate 包具有很好的函数,例如 hour()year() 等,可以提取日期对象的适当组件。这是一个示例,说明如何使用它在具有 24 小时时间的玩具数据集上创建一个新列,并使用 ifelse(),它是一个矢量化的if,如果它在 06 之前进行分类:00:00。

fake_times <- data.frame(time = as.POSIXct('2018-04-01 00:00:01') + (0:23) * 3600)

library(lubridate)

fake_times$hour <- hour(fake_times$time)
fake_times$timeperiod <- ifelse(fake_times$hour < 6, 'early', 'late')

输出如下所示。

   time                   hour   timeperiod
1  2018-04-01 00:00:01    0      early
2  2018-04-01 01:00:01    1      early
3  2018-04-01 02:00:01    2      early
4  2018-04-01 03:00:01    3      early
5  2018-04-01 04:00:01    4      early
6  2018-04-01 05:00:01    5      early
7  2018-04-01 06:00:01    6       late
8  2018-04-01 07:00:01    7       late
9  2018-04-01 08:00:01    8       late
10 2018-04-01 09:00:01    9       late
11 2018-04-01 10:00:01   10       late
12 2018-04-01 11:00:01   11       late
13 2018-04-01 12:00:01   12       late
14 2018-04-01 13:00:01   13       late
15 2018-04-01 14:00:01   14       late
16 2018-04-01 15:00:01   15       late
17 2018-04-01 16:00:01   16       late
18 2018-04-01 17:00:01   17       late
19 2018-04-01 18:00:01   18       late
20 2018-04-01 19:00:01   19       late
21 2018-04-01 20:00:01   20       late
22 2018-04-01 21:00:01   21       late
23 2018-04-01 22:00:01   22       late
24 2018-04-01 23:00:01   23       late

【讨论】:

  • 所以我不确定我的错误在哪里,但它将所有内容都归类为“早期”
  • 所以理想情况下我想这样分类:创建时间段的划分 early=midnight-6am day=6:01-noon mid=13:01-18:00 night=18: 01-23:59 感谢您的帮助,我离我更近了!
  • @HillaryAnnDean 在这种情况下,您可能希望在创建 hour 列后执行此操作:fake_times$timeperiod &lt;- cut(fake_times$hour, breaks = c(0, 6, 12, 18, 24), right = FALSE, labels = c('early', 'day', 'mid', 'night'))。这使得一个具有四个级别的因子在您指定的位置拆分,并使用您指定的标签。
  • 你太棒了,谢谢!我使用 cast 和 melt 以及你给我的代码完成了所有工作,所以我需要弄清楚的是我的常态测试、绘图和方差分析,我已经完成了 :) 我已经用那个代码愚弄了 4 天
  • @HillaryAnnDean 仅供参考,如果您认为这个答案是正确的,请接受它,以便其他人可以看到这是一个很好的解决方案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-08-15
  • 2022-06-17
  • 1970-01-01
  • 1970-01-01
  • 2013-08-28
  • 1970-01-01
  • 2020-10-10
相关资源
最近更新 更多