2011-12-19 69 views
0

我有一個很大的數據框,它有來自多個州的調查數年的觀察。這裏的數據結構:在數據框的子集上插值變量

state | survey.year | time1 | obs1 | time2 | obs2 
CA | 2000  | 1  | 23 | 1.2 | 43 
CA | 2001  | 2  | 43 | 1.4 | 52 
CA | 2002  | 5  | 53 | 3.2 | 61 
... 
CA | 1998  | 3  | 12 | 2.3 | 20 
CA | 1999  | 4  | 14 | 2.8 | 25 
CA | 2003  | 5  | 19 | 4.3 | 29 
... 
ND | 2000  | 2  | 223 | 3.2 | 239 
ND | 2001  | 4  | 233 | 4.2 | 321 
ND | 2003  | 7  | 256 | 7.9 | 387 

每個國家/ survey.year組合,我想插OBS2所以,它的時間,位置排列有(時間1,OBS1)。

即我想將數據幀分解成狀態/ survey.year塊,執行我的線性插值,然後將單個狀態/ survey.year數據幀拼接成主數據幀。

我一直在試圖弄清楚如何使用plyr和Hmisc包。但不要讓自己陷入糾結。

下面是我寫的做插值後的代碼:

require(Hmisc) 
df <- new.obs2 <- NULL 
for (i in 1:(0.5*(ncol(indirect)-1))){ 
df[,"new.obs2"] <- approxExtrap(df[,"time1"], 
            df[,"obs1"], 
            xout = df[,"obs2"], 
            method="linear", 
            rule=2) 
} 

但我不知道如何釋放這個問題plyr。您的慷慨建議和建議將不勝感激。本質上 - 我只是試圖在每個州/ survey.year組合中插入「obs2」,所以它的引用與「obs1」的引用對齊。

當然,如果有做,而無需調用plyr功能的華而不實的方法,那麼我會持開放的態度......

謝謝!

回答

2

這應該是那樣簡單,

ddply(df,.(state,survey.year),transform, 
           new.obs2 = approxExtrap(time1,obs1,xout = obs2, 
                 method = "linear", 
                 rule = 2)) 

但我不能答應你什麼,因爲我一點都不知道知道什麼你for循環的點。 (它每次都通過循環覆蓋df[,"new.obs2"]?初始化整個數據幀dfNULL?什麼是indirect?)