【问题标题】:classify data based on length of continous time根据连续时间的长度对数据进行分类
【发布时间】:2017-03-08 10:10:53
【问题描述】:

可能我在问一些非常简单的问题,但我是 R 新手,我在论坛上并没有真正找到类似的东西。

我有一个如下所示的数据框:

             bigDData.dt bigDData.a_temp bigDData.diff bigDData.V33
3148  2009-03-31 09:50:00            8.45      6.071806          yes
3149  2009-03-31 09:55:00            9.31      6.802639          yes
3150  2009-03-31 10:00:00           10.55      7.898750          yes
3151  2009-03-31 10:05:00           11.16      8.357361          yes
3152  2009-03-31 10:10:00           11.37      8.413889          yes
3153  2009-03-31 10:15:00           11.51      8.398750          yes
3154  2009-03-31 10:20:00           11.77      8.499306          yes
3155  2009-03-31 10:25:00           12.42      8.979583          yes
3156  2009-03-31 10:30:00           12.76      9.144722          yes
3412  2009-04-01 07:50:00            7.33      6.233472          yes
3413  2009-04-01 07:55:00            7.65      6.455972          yes
3414  2009-04-01 08:00:00            7.97      6.676250          yes
3415  2009-04-01 08:05:00            8.12      6.724583          yes
3416  2009-04-01 08:10:00            8.40      6.899028          yes

我很想知道连续数据的持续时间。例如,我想知道我在 2009-04-01 上的数据的持续时间是 20 分钟。然后我想根据连续数据的长度对数据进行分类。我尝试使用 for is 循环,其中包含 if 条件,但我不太能够以一种好的方式制定它,所以我没有得到我想要的。也许有一个 R-package/function 可以做到这一点?或者也许你们中有人知道如何以正确的方式编写循环?

非常感谢!

【问题讨论】:

  • 想要的输出是什么?

标签: r loops if-statement for-loop dataframe


【解决方案1】:

padrdplyr 包的帮助下,df 是您的数据框:

library(dplyr); library(padr)
  df %>% thicken("day", col = "day") %>% 
  group_by(day) %>% 
  summarise(duration = max(bigDData.dt) - min(bigDData.dt))

这假定您的列 bigDData.dt 属于 POSIXctPOSIXlt 类。

【讨论】:

  • 非常感谢,这实际上很有帮助。我无法真正弄清楚为什么会像第 6 行 = "2009-06-29 30.000000 hours" 那样每天输出 30 小时
  • 您的示例数据集中没有 2009-06-29,所以我无法弄清楚问题所在。当我运行上述代码时,我得到了 40 分钟和 20 分钟。
猜你喜欢
  • 1970-01-01
  • 2012-05-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-27
  • 1970-01-01
  • 2018-12-26
  • 2019-10-22
相关资源
最近更新 更多