我有一個3列,訂單,放電,日期(數值)的大型數據集。有20年,每個訂單每天排放價值觀,它可以超越100替代循環和索引?
> head(dat)
Order Discharge date
1 0.04712 6574
2 0.05108 6574
3 0.00000 6574
4 0.00000 6574
5 3.54100 6574
6 3.61500 6574
延長對於給定的順序X,我願與平均更換放電值在該日期的x + 1和x-1的放電量。我一直以粗略的方式進行for循環和索引,但處理需要一個多小時。我知道必須有更好的方法。
x <- 4
for(i in min(dat[,3]):max(dat[,3]))
dat[,2][dat[,3] == i & dat[,1] == x ] <-
mean(c(dat[,2][dat[,3] == i & dat[,1] == x + 1],
dat[,2][dat[,3] == i & dat[,1] == x - 1]))
給人
> head(dat)
Order Discharge date
1 0.04712 6574
2 0.05108 6574
3 0.00000 6574
4 1.77050 6574
5 3.54100 6574
6 3.61500 6574
如果放於訂單4,日期6574已替換爲1.77050。它有效,但速度很慢。
我應該指定我不需要在每個訂單上進行此計算,但只有少數幾個(總共117箇中只有8個)。基於這個答案,我有以下幾點。
dat$NewDischarge <- by(dat$Discharge,dat$date,function(x)
colMeans(cbind(c(x[-1],NA), x,
c(NA, x[-length(x)])), na.rm=T))
我想還是想出一個辦法只有選擇訂單的值進行計算和我停留在一個for循環和索引的日期和訂單的車轍。
你有什麼選擇'x'的標準?是否有一個外部循環來確定你沒有向我們展示'x'?這可能是相關的。 – Peyton
順序代表測量河流流量的河流站點。 X-1和X + 1基本上是上游和下游的臺站。我希望從上游和下游站的某一天的平均排放量中適用當天的中間站。我已經單獨確定了這些x(有8個),但是我可以將它們放入一個向量中並將其包含在函數中。 – user2850039