大圖解釋是我想對R中的環境數據做一個滑動窗口分析。我有選擇數目的連續日期的PAR(光合有效輻射)數據 - 根據其他生物因素確定)爲兩年(2014年和2015年),每天的PAR值爲1。請參閱下面的數據框的幾行第一行(數據框名稱爲「rollingpar」)。R中的for循環中的數據幀的滾動子集
par14 par15
1356.3242 1306.7725
NaN 1232.5637
1349.3519 505.4832
NaN 1350.4282
1344.9306 1344.6508
NaN 1277.9051
989.5620 NaN
我想創建一個循環(或任何其他可能的方式),以子集的數據幀(兩列!)爲從開始2周窗口(14行)來完成滑動從一個窗口到下一個到一週(7行)。因此,第一個窗口將包含1到14行,第二個窗口將包含8到21行等等。子集化後,數據需要在結構中翻轉(目前使用reshape2包中的熔化函數),以便PAR數據的值位於一列中,而par14或par15的變量位於另一列中。然後,我需要擺脫NaN數據,最後在每個窗口上進行wilcox秩和檢驗,比較可變年份(par14或par15)的PAR。下面是我寫的代碼來證明我想要的概念,第一個子集窗口給了我想要的東西。
library(reshape2)
par.sub=rollingpar[1:14, ]
par.sub=melt(par.sub)
par.sub=na.omit(par.sub)
par.sub$variable=as.factor(par.sub$variable)
wilcox.test(value~variable, par.sub)
#when melt flips a data frame the columns become value and variable...
#for this case value holds the PAR data and variable holds the year
#information
當我試圖寫一個for循環通過整個數據幀迭代過程(總行數= 139)我有錯誤每哪種方式我跑它。另外,這個循環甚至沒有考慮到一週的滑動情況。我想如果我能弄清楚如何讓窗口先通過循環運行分析,然後我可以嘗試通過滑動部分進行分析。基本上我意識到,我解釋我想要的和我爲循環寫的東西稍有不同。下面的代碼是逐行或以一天爲基礎滑動。如果解決方案包含一週的下滑,我將不勝感激。我對R相當陌生,對循環沒有豐富的經驗,所以我覺得可能有一個簡單的修復方法來完成這個工作。
wilcoxvalues=data.frame(p.values=numeric(0))
Upar=rollingpar$par14
for (i in 1:length(Upar)){
par.sub=rollingpar[[i]:[i]+13, ]
par.sub=melt(par.sub)
par.sub=na.omit(par.sub)
par.sub$variable=as.factor(par.sub$variable)
save.sub=wilcox.test(value~variable, par.sub)
for (j in 1:length(save.sub)){
wilcoxvalues$p.value[j]=save.sub$p.value
}
}
如果任何人有一個更好的方式,通過不同的包或功能,我不知道我會喜歡被悟到做到這一點。我確實嘗試了滾動應用,但遇到了將問題應用到整個數據框而不是一列的問題。我已經從關於子集,循環和滾動分析的許多其他問題中尋求幫助,但似乎無法完全找到我需要的東西。任何幫助將感激沮喪的研究生:)如果我沒有提供足夠的信息,請讓我知道。
謝謝!這正是我所需要的。我只需要調整slidingWindow來反映我的數據集中的行數,然後在熔化步驟中添加一個id.vars,但它的工作完美! –
好聽!很高興我能幫上忙! – Parfait