【问题标题】:R count positive negative numbers and group them by periods in a data frame [duplicate]R计数正负数并按数据帧中的周期对它们进行分组[重复]
【发布时间】:2017-12-25 21:02:35
【问题描述】:

我有一个 365 天的数据集,其中分别包含一个温度值。 我想分析包含正温度的天数和包含负温度的周期。所以我想计算一个周期的天数,直到温度突破 0。我已经设置了一个跟踪代数符号的列,但是现在我想添加另一个列来跟踪正数天数和负数天数,这样我就可以按每个周期分组并计算消耗的平均值、最小值、最大值等。 我目前不确定如何在绘图中绘制结果,但也许你有一个想法..

         Time  Consumption STABW_hour   Min    Max     mean DeltaDaymean  Sign
       <dttm>        <dbl>      <dbl> <dbl>  <dbl>    <dbl>        <dbl> <dbl>
1  2014-01-01       1053.5   76.56046   964 1597.5 1159.804   -106.30411    -1
2  2014-01-02       1197.5   76.56046   964 1597.5 1159.804     37.69589     1
3  2014-01-03       1245.5   76.56046   964 1597.5 1159.804     85.69589     1
4  2014-01-04       1147.5   76.56046   964 1597.5 1159.804    -12.30411    -1
5  2014-01-05       1194.0   76.56046   964 1597.5 1159.804     34.19589     1
6  2014-01-06       1171.5   76.56046   964 1597.5 1159.804     11.69589     1
7  2014-01-07       1166.5   76.56046   964 1597.5 1159.804      6.69589     1
8  2014-01-08       1135.0   76.56046   964 1597.5 1159.804    -24.80411    -1
9  2014-01-09       1168.0   76.56046   964 1597.5 1159.804      8.19589     1
10 2014-01-10       1181.5   76.56046   964 1597.5 1159.804     21.69589     1

结果应该是这样的,然后我可以按新列分组数据..

         Time  Consumption STABW_hour   Min    Max     mean DeltaDaymean  Sign Period
       <dttm>        <dbl>      <dbl> <dbl>  <dbl>    <dbl>        <dbl> <dbl>  <dbl>
1  2014-01-01       1053.5   76.56046   964 1597.5 1159.804   -106.30411    -1      1
2  2014-01-02       1197.5   76.56046   964 1597.5 1159.804     37.69589     1      2
3  2014-01-03       1245.5   76.56046   964 1597.5 1159.804     85.69589     1      2
4  2014-01-04       1147.5   76.56046   964 1597.5 1159.804    -12.30411    -1      3
5  2014-01-05       1194.0   76.56046   964 1597.5 1159.804     34.19589     1      4
6  2014-01-06       1171.5   76.56046   964 1597.5 1159.804     11.69589     1      4
7  2014-01-07       1166.5   76.56046   964 1597.5 1159.804      6.69589     1      4
8  2014-01-08       1135.0   76.56046   964 1597.5 1159.804    -24.80411    -1      5
9  2014-01-09       1168.0   76.56046   964 1597.5 1159.804      8.19589     1      6
10 2014-01-10       1181.5   76.56046   964 1597.5 1159.804     21.69589     1      6

非常感谢!

【问题讨论】:

  • cumsum(c(TRUE, diff(DF$Sign)!=0))
  • 谢谢。是的,它是重复的,但我不知道谷歌的正确温度,以便找到正确的解决方案。

标签: r count group-by dplyr


【解决方案1】:

使用dplyr,我们可以做到这一点

library(dplyr)
df1 %>% 
   mutate(Period = inverse.rle(within.list(rle(Sign), values <- seq_along(values))))

或者我们可以使用来自data.tablerleid

library(data.table)
setDT(df1)[, Period := rleid(Sign)]

【讨论】:

  • 我使用了 dplyr 变体,效果很好。谢谢。
猜你喜欢
  • 2020-10-24
  • 1970-01-01
  • 2017-01-23
  • 2022-01-03
  • 2012-07-20
  • 1970-01-01
  • 1970-01-01
  • 2018-03-04
  • 1970-01-01
相关资源
最近更新 更多