我想在现有数据框中添加一个新列,该列基于“时间”列从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
我不确定如何添加一个可解决“时间”数据中差距的计数。任何帮助将不胜感激!谢谢!
答案 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)))))