我有一個資料 df2
date X Days
2020-01-06 525 NA
2020-01-07 799 NA
2020-01-08 782 NA
2020-01-09 542 NA
2020-01-10 638 5
2020-01-11 1000 5
2020-01-12 1400 3
2020-01-13 3500 1
我想計算 X 的總和超過一個值需要多少天。在這種情況下,該值為 3000。例如在 1/13 上,需要 1 天,因為 X 是 3500,所以它已經超過了 3000。在 1/12 上,需要 3 天 (1400 1000 638)=3038。
我希望得到列天。
dput(df2)
structure(list(date = structure(c(1578268800, 1578355200, 1578441600,
1578528000, 1578614400, 1578700800, 1578787200, 1578873600), class = c("POSIXct",
"POSIXt"), tzone = "UTC"), X = c(525, 799, 782, 542, 638, 1000,
1400, 3500), Days = c(NA, NA, NA, NA, 5, 5, 3, 1)), class = "data.frame", row.names = c(NA,
-8L))
uj5u.com熱心網友回復:
我認為滾動功能效果很好。與大多數具有小于資料長度的固定視窗的滾動函式不同,我們將有意將其設為全角。
zoo::rollapplyr(
df2$X, nrow(df2),
FUN = function(z) which(cumsum(rev(z)) > 3000)[1],
partial = TRUE)
# [1] NA NA NA NA 5 5 3 1
(我忽略date,假設這些行是連續的。)
uj5u.com熱心網友回復:
cs <- c(0, cumsum(rev(df$X)))
out <- sapply(cs, function(x) which(cs - x > 3e3)[1])
rev(out - seq_along(cs))
#> [1] NA NA NA NA NA 5 5 3 1
由reprex 包于 2022-01-06 創建(v2.0.1)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/404943.html
標籤:
上一篇:R:如何保留和過濾行內的重復項
下一篇:R中的熱圖無法正確顯示
