求助:理解if_else语句语法差异及代码逻辑解析
温度记录仪数据标记代码逻辑解析
作为if_else语句的新手,需要理解离职同事留下的代码逻辑——用于标记温度记录仪的采集数据,过滤回收后或两次部署间隔的无效数据。记录仪分为两类:仅完成一次部署与回收(如示例中的B)、完成两次部署与回收(如A、C)。数据集(df)结构如下:
| temp | Datetime_log | deploy_1 | deploy_2 | retrieve_1 | retrieve_2 | Logger |
|---|---|---|---|---|---|---|
| 3.7 | Datetime | Datetime | Datetime | Datetime | Datetime | A |
| 3.6 | Datetime | Datetime | Datetime | Datetime | Datetime | A |
| 3.4 | Datetime | Datetime | Datetime | Datetime | Datetime | A |
| 3.1 | Datetime | Datetime | Datetime | B | ||
| 1.5 | Datetime | Datetime | Datetime | B | ||
| 1.5 | Datetime | Datetime | Datetime | Datetime | Datetime | C |
代码逻辑解析
1. 第一段代码:df$flag1 <- if_else(is.na(df$deploy_2),0,if_else(df$Datetime_log>retrieve_1 & df$Datetime_log<deploy_2,1,0))
你的理解完全正确,拆解逻辑如下:
- 先判断
deploy_2是否为NA:- 若是(对应单次部署的记录仪),直接给
flag1赋值0——代表该数据不属于「两次部署间隔的无效数据」。 - 若不是(对应两次部署的记录仪),进入第二层判断:
- 当
Datetime_log在retrieve_1(第一次回收时间)和deploy_2(第二次部署时间)之间时,赋值1——代表这是两次部署间隔的无效数据。 - 其他所有情况,赋值0——代表不属于该类无效数据。
- 当
- 若是(对应单次部署的记录仪),直接给
这里的0是「不符合当前判断条件」的标记值,用来区分有效数据和目标无效数据。
2. 第二段代码:df$flag2 <- if_else(is.na(df$deploy_2), if_else(df$Datetime_log>df$retrieve_1, 1,0),0)
你的理解也完全正确,拆解逻辑如下:
- 先判断
deploy_2是否为NA:- 若不是(对应两次部署的记录仪),直接给
flag2赋值0——代表该数据不属于「单次部署回收后的无效数据」。 - 若是(对应单次部署的记录仪),进入第二层判断:
- 当
Datetime_log晚于retrieve_1(回收时间)时,赋值1——代表这是单次部署回收后的无效数据。 - 其他情况(回收前的有效数据),赋值0——代表不属于该类无效数据。
- 当
- 若不是(对应两次部署的记录仪),直接给
同样,这里的0是「不符合条件」的标记值,用来筛选出回收后的无效数据。
内容的提问来源于stack exchange,提问作者fishlakeslimno
相关产品推荐
相关产品推荐

