由于我的代码返回了错误的值,因此需要帮助来纠正我的代码。以下是我的数据框:
df1 <- structure(list(time = structure(c(1613331000, NA, NA, NA, NA,
1613331300, NA, NA, NA, NA, 1613331600, NA, NA, NA, NA, 1613331900
), class = c("POSIXct", "POSIXt"), tzone = "UTC"), value1 = c(5.68,
NA, NA, NA, NA, 3.57, NA, NA, NA, NA, 0.75, NA, NA, NA, NA, 0
), value2 = c(0.0195194035275764, 0.0387245255910196, 0.00162031204013874,
0.0086653793112231, 0.0244045196814313, 5.0142002638127, 0.00389385395628555,
0.0047142460835886, 0.00239093814854349, 0.00187517052122717,
0.000630486008603659, 0.00144237859581879, 0.00126141089854626,
0.0000177735700308129, 0.000335643594999671, 0.012771405154744
), test = c(NA, 1, 1, 1, 1, 0, 0, 1, 1, 1, 0, 1, 1, 1, 1, 0)), class = "data.frame", row.names = c(NA,
-16L))
我尝试重新创建的逻辑是,如果当前和前四个value2输入小于value1,则向df2 $ test输出“ 1”。如果至少一个当前值或前四个value2等于或大于value1,则输出“ 0”。我想为我的结果加1的实例。如果可能,将NA保留在没有时间的行上。
这是我的代码,任何建议,不胜感激,是第一次张贴。
df2 <- df1 %>%
mutate (test = 0,
test = ifelse(is.na(value1) < value2, 0, 1),
test = ifelse(is.na(value1) < lag(value2, k=1),0, 1),
test = ifelse(is.na(value1) < lag(value2, k=2),0, 1),
test = ifelse(is.na(value1) < lag(value2, k=3),0, 1),
test = ifelse(is.na(value1) < lag(value2, k=4),0, 1))
View(df2)
使用zoo
的rollapplyr
:
library(dplyr)
df1 %>%
mutate(last4max = zoo::rollapplyr(value2, 5, max, fill = NA),
test = as.integer(value1 > last4max))
# time value1 value2 test last4max
#1 2021-02-14 19:30:00 5.68 1.951940e-02 NA NA
#2 <NA> NA 3.872453e-02 NA NA
#3 <NA> NA 1.620312e-03 NA NA
#4 <NA> NA 8.665379e-03 NA NA
#5 <NA> NA 2.440452e-02 NA 0.038724526
#6 2021-02-14 19:35:00 3.57 5.014200e+00 0 5.014200264
#7 <NA> NA 3.893854e-03 NA 5.014200264
#8 <NA> NA 4.714246e-03 NA 5.014200264
#9 <NA> NA 2.390938e-03 NA 5.014200264
#10 <NA> NA 1.875171e-03 NA 5.014200264
#11 2021-02-14 19:40:00 0.75 6.304860e-04 1 0.004714246
#12 <NA> NA 1.442379e-03 NA 0.004714246
#13 <NA> NA 1.261411e-03 NA 0.002390938
#14 <NA> NA 1.777357e-05 NA 0.001875171
#15 <NA> NA 3.356436e-04 NA 0.001442379
#16 2021-02-14 19:45:00 0.00 1.277141e-02 0 0.012771405
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句