【发布时间】:2019-04-22 04:41:40
【问题描述】:
具有以下类型的数据并希望通过检查 NA 行的 i-1 和 i+1 行来重新标记其 NA 行。
test <- data.frame(sd_value=c(77,18,3,16,32,76),
value=c(5400,6900,7080,1892,4207,4403),
label=c(c("good",NA,"unable"),c("bads",NA,"good")))
> test
sd_value value label
1 77 5400 good
2 18 6900 <NA>
3 3 7080 unable
4 16 1892 bads
5 32 4207 <NA>
6 76 4403 good
我要重新标记NA 行的条件是
在简单的图片中:将上一行和下一行的值与NA 行进行比较。如果差异为 NA 行。
如果上一行或下一行是good,则有一个特殊条件。
如果
NA的 i-1 或 i+1 行与 diff(value)如果差异 i+1 标记为
good并且行 diff(value)eww! 标签。
预期输出
> test
sd_value value label
1 77 5400 good
2 18 6900 unable
3 3 7080 unable
4 16 1892 bads
5 32 4207 eww!
6 76 4403 good
检查差异值 i-1 和 i+1
> test%>%
+ mutate(diff_val=c(0,diff(value)), diff_sd_val=c(0,diff(sd_value)))
sd_value value label diff_val diff_sd_val
1 77 5400 good 0 0
2 18 6900 <NA> 1500 -59
3 3 7080 unable 180 -15
4 16 1892 bads -5188 13
5 32 4207 <NA> 2315 16
6 76 4403 good 196 44
【问题讨论】:
-
如果
i-1和i+1的差异出现平局会发生什么?然后会发生什么? -
@TimBiegeleisen 你这是什么意思?
-
@NelsonGon 他们使用相同的差异标准。请检查 OP 的结尾。
-
重新标记的条件不清楚,至少对我来说是这样。
-
我认为 Tim 的意思是如果行
i - 1和 行i + 1都满足value < 200和sd_value < 50条件,那么label优先?