我从设备的操作记录器收到的示例数据
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
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