如何将一列添加到根据另一列中的值向上计数的数据框中?

时间:2019-04-23 05:45:38

标签: r count

我想在现有数据框中添加一个新列,该列基于“时间”列从1开始递增计数。时间数据以小时为单位,在24小时内以小时为单位,从1400开始(在此示例中)。由于时间数据偶尔会跳过一些小时间隔(例如,在本示例中为1800到2100),因此我需要count列也以相同的程度跳过。

我的数据当前如下所示:

X ID    Measure  Time  
1 793   38.3      14  
2 793   37.9      15  
3 793   38    16  
4 793   38.4      17  
5 793   38.7      18  
6 793   38.9      21  
7 793   38.3      22  
8 793   38.1      23  
9 793   38    0  
10 793  38.3      1  
11 793  38.5      2  
12 793  37.8      3  
13 793  37.4      4  
14 793  37.4      5  
15 793  37.7      6  
16 793  37.8      7  
17 793  37.9      8  
18 793  37.2      9  
19 793  38    10  
20 793  38.4      11  
21 793  37.8      12  
22 793  37.8      13 

我需要它看起来像这样:

X ID    Measure  Time  Time2  
1 793   38.3      14   1  
2 793   37.9      15   2  
3 793   38    16   3  
4 793   38.4      17   4  
5 793   38.7      18   5  
6 793   38.9      21   8  
7 793   38.3      22   9  
8 793   38.1      23   10  
9 793   38    0    11  
10 793  38.3      1    12  
11 793  38.5      2    13  
12.793  37.8      3    14  
13 793  37.4      4    15  
14 793  37.4      5    16  
15 793  37.7      6    17  
16 793  37.8      7    18  
17 793  37.9      8    19  
18 793  37.2      9    20  
19 793  38    10   21  
20 793  38.4      11   22  
21 793  37.8      12   23  
22 793  37.8      13   24  

我不确定如何添加一个可解决“时间”数据中差距的计数。任何帮助将不胜感激!谢谢!

2 个答案:

答案 0 :(得分:1)

这是base-R解决方案:

# read data
df <- read.table(
  text = "
  X ID    Measure  Time
  1 793   38.3      14
  2 793   37.9      15
  3 793   38        16
  4 793   38.4      17
  5 793   38.7      18
  6 793   38.9      21
  7 793   38.3      22
  8 793   38.1      23
  9 793   38        0
  10 793  38.3      1
  11 793  38.5      2
  12 793  37.8      3
  13 793  37.4      4
  14 793  37.4      5
  15 793  37.7      6
  16 793  37.8      7
  17 793  37.9      8
  18 793  37.2      9
  19 793  38        10
  20 793  38.4      11
  21 793  37.8      12
  22 793  37.8      13 ",
  header = TRUE
)

df$time2 <- c(1, diff(df$Time)) # differences between time entries
df$time2[df$time2 < 0] <- df$time2[df$time2 < 0] + 24 # replace difference of -23 hours at midnight
df$time2 <- cumsum(df$time2) # cummulative sum

我们只是简单地建立时间条目之间的差异并将其汇总。如果更改日期与您的日期有负差,我们会添加24。此解决方案假定时间条目已排序

答案 1 :(得分:0)

以下是dplyr的替代方法:

library(dplyr)
df %>% mutate(diff = cumsum(ifelse(c(1, diff(Time)) < 0, 24 + c(1, diff(Time)), c(1, diff(Time)))))