为事件序列分配标识符,避免错误观察

问题描述 投票:0回答:1

我从设备的操作记录器收到的示例数据

df1 <- read.table(text = "temp.1
heating
heating
heating
heating
heating
heating
heating
heating
cooling
heating
heating
heating
heating
heating
heating
cooling
cooling
cooling
cooling
cooling
cooling
cooling
heating
heating
heating
cooling
cooling
heating
heating
heating
cooling
heating
heating
heating
heating
cooling
cooling
cooling
cooling
heating
heating
heating
cooling
heating
cooling
heating
cooling
heating
heating
heating
heating", header = TRUE)

“加热”期间偶尔会出现一次(最多两次)“冷却”观察。这是一个错误,我希望忽略这些值。我想标记修正后的占空比。标记还应包含序列号 - 需要有关特定日期发生的加热和冷却循环次数的信息 预期结果:

> df1
    temp.1 level
1  heating   H.1
2  heating   H.1
3  heating   H.1
4  heating   H.1
5  heating   H.1
6  heating   H.1
7  heating   H.1
8  heating   H.1
9  cooling   H.1
10 heating   H.1
11 heating   H.1
12 heating   H.1
13 heating   H.1
14 heating   H.1
15 heating   H.1
16 cooling   C.1
17 cooling   C.1
18 cooling   C.1
19 cooling   C.1
20 cooling   C.1
21 cooling   C.1
22 cooling   C.1
23 heating   H.2
24 heating   H.2
25 heating   H.2
26 cooling   H.2
27 cooling   H.2
28 heating   H.2
29 heating   H.2
30 heating   H.2
31 cooling   H.2
32 heating   H.2
33 heating   H.2
34 heating   H.2
35 heating   H.2
36 cooling   C.2
37 cooling   C.2
38 cooling   C.2
39 cooling   C.2
40 heating   H.3
41 heating   H.3
42 heating   H.3
43 cooling   H.3
44 heating   H.3
45 cooling   H.3
46 heating   H.3
47 cooling   H.3
48 heating   H.3
49 heating   H.3
50 heating   H.3
51 heating   H.3
r dplyr
1个回答
0
投票

data.table
方法

library(data.table)
# set to data.table format
setDT(df1)
# initialise heating or cooling level
df1[, level := toupper(substr(temp.1,1,1))]
# override level  of 2 or less with "H"
df1[, level := if (.N <= 2) "H", by = .(rleid(temp.1))]
# tamporary value, can be dropped later
df1[, temp := rleid(level)]
# create the correct level id, and drop the temp column at the end
df1[, level := paste(level, as.integer(factor(temp)), sep = "."), by = .(level)][, temp := NULL][]

输出

#      temp.1  level
#      <char> <char>
#  1: heating    H.1
#  2: heating    H.1
#  3: heating    H.1
#  4: heating    H.1
#  5: heating    H.1
#  6: heating    H.1
#  7: heating    H.1
#  8: heating    H.1
#  9: cooling    H.1
# 10: heating    H.1
# 11: heating    H.1
# 12: heating    H.1
# 13: heating    H.1
# 14: heating    H.1
# 15: heating    H.1
# 16: cooling    C.1
# 17: cooling    C.1
# 18: cooling    C.1
# 19: cooling    C.1
# 20: cooling    C.1
# 21: cooling    C.1
# 22: cooling    C.1
# 23: heating    H.2
# 24: heating    H.2
# 25: heating    H.2
# 26: cooling    H.2
# 27: cooling    H.2
# 28: heating    H.2
# 29: heating    H.2
# 30: heating    H.2
# 31: cooling    H.2
# 32: heating    H.2
# 33: heating    H.2
# 34: heating    H.2
# 35: heating    H.2
# 36: cooling    C.2
# 37: cooling    C.2
# 38: cooling    C.2
# 39: cooling    C.2
# 40: heating    H.3
# 41: heating    H.3
# 42: heating    H.3
# 43: cooling    H.3
# 44: heating    H.3
# 45: cooling    H.3
# 46: heating    H.3
# 47: cooling    H.3
# 48: heating    H.3
# 49: heating    H.3
# 50: heating    H.3
# 51: heating    H.3
#      temp.1  level
© www.soinside.com 2019 - 2024. All rights reserved.