我从设备的运行记录器接收的样本数据

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

EDIT2: 还有一个我没有预料到的 case ,我的问题也不准确.请看第51-53节.当一个"冷"系列被一次"加热"打断时,它也应该被忽略. 我试图修改您的解决方案,但没有成功

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   C.3
48: cooling   C.3
49: cooling   C.3
50: cooling   C.3
51: cooling   C.3
52: heating   C.3
53: cooling   C.3
54: cooling   C.3
55: cooling   C.3
56: heating   H.4
57: heating   H.4
58: heating   H.4

"加热"3次后出现"冷却",或"冷却"3次后出现"加热",将类别改为"水平".因此,第26-27行被认为是错误的,第23-25行被认为改变了"级别".

推荐答案

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 groupsizes size 2 or less with "H"
df1[, level := if (.N <= 2) "H", by = .(rleid(temp.1))]
# tamporary value for indexing, can be dropped at the end
df1[, temp := rleid(level)]
# create the correct level id, and afterwards drop the temp column
df1[, level := paste(level, as.integer(factor(temp)), sep = "."), by = .(level)][, temp := NULL][]

update for updated sample data / desired output

library(data.table)
setDT(df1)
# determine groups of 3 (or more) consecutive temp.1
df1[, group := if (.N >= 3) .GRP, by = .(rleid(temp.1))]
# fill down missing groupnumbers
setnafill(df1, type = "locf", cols = "group")
# set level letter (from iniktlal answer)
df1[, level := toupper(substr(temp.1[1],1,1)), by = .(group)]
df1[, temp := rleid(level)]
df1[, level := paste(level, as.integer(factor(temp)), sep = "."), by = .(level)][, temp := NULL][]

R相关问答推荐

geom_raster不适用于x比例中超过2,15的值

是否有任何解决方案可以优化VSCode中RScript的图形绘制?

管道末端运行功能

如果行和大于值,则过滤

ggplot2中的X轴显示数值,单位为百,而不是十

将. xlsx内容显示为HTML表

方法::slotName如何处理非类、非字符的参数?

Ggplot2中geom_tile的动态zoom

自定义gggraph,使geom_abline图层仅在沿x轴的特定范围内显示

将全局环境变量的名称分配给列表中的所有元素

Rmarkdown::Render vs Source()

从线的交点创建面

访问数据帧中未定义的列时出现R错误

在ggploy中创建GeV分布时出错

是否从列中删除★符号?

我已经运行了几个月的代码的`Palette()`中出现了新的gglot错误

R:改进实现简单模型

如何在R曲线图弹出窗口中更改r和theta标签

Ggplot2水平线和垂直线的图例图标不匹配

只有当我在循环的末尾放置一条print语句时,Foreach才会给出预期的输出