我有一個大約25000條記錄和10列的數據框。我正在使用代碼來確定在同一列(NewVal)中基於另一列(y)已更改百分比已更改爲以前的值。有更快的方法來獲得百分比變化嗎?
x=c(1:25000)
y=rpois(25000,2)
z=data.frame(x,y)
z[1,'NewVal']=z[1,'x']
於是我就這樣:
for(i in 2:nrow(z)){z$NewVal[i]=z$NewVal[i-1]+(z$NewVal[i-1]*(z$y[i]/100))}
這大大超過我預期需要。誠然,我可能是一個不耐煩的人 - 正如我曾經說過的一封嚴厲的信件 - 但我試圖逃避Excel的世界(在我讀http://www.burns-stat.com/pages/Tutor/spreadsheet_addiction.html之後,由於我開始懷疑數據,這導致了更多問題 - 那封信也提到了我的信任問題)。
我想這樣做,而不使用軟件包中的任何函數,因爲我想知道創建值的公式是什麼 - 或者如果您願意,根據該友好信函我是一個要求苛刻的控制怪胎。
我也想知道如何在caTools中獲得像rollmean一樣的移動平均值。無論是或如何找出他們的公式是什麼?我試着輸入rollmean,我認爲它是指另一個函數(我是R的新手)。這應該可能是另一個問題 - 但正如那封信所說,我從來沒有在我的生活中做出正確的決定。
它只要作品爲'X = C(1:25000)'但如果'X = C(25000:1)'我得到不同的結果。 – thequerist
編輯答案。我相信它現在適用於這兩種情況。 – Andrie
我討厭這樣做給你,但是當'z $ x [1] = 0'時,一切都出來了0.無論如何,我也會檢查'cumprod'和'with',看看我能不能拿出任何東西。 – thequerist