2013-07-21 91 views
0

我有一些交叉相關函數crosscor,我想遍歷我的數據矩陣中每個列的函數。功能輸出,看起來像這樣在每次運行時的一些互相關:R並附加到數據幀中

 Lags Cross.Correlation  P.value 
    1  0  -0.0006844958 0.993233547 
    2  1  0.1021006478 0.204691627 
    3  2  0.0976746274 0.226628526 
    4  3  0.1150337867 0.155426784 
    5  4  0.1943150900 0.016092041 
    6  5  0.2360415470 0.003416147 
    7  6  0.1855274375 0.022566685 
    8  7  0.0800646242 0.330081900 
    9  8  0.1111071269 0.177338885 
    10 9  0.0689602574 0.404948252 
    11 10  -0.0097332533 0.906856279 
    12 11  0.0146241719 0.860926388 
    13 12  0.0862549791 0.302268025 
    14 13  0.1283308019 0.125302070 
    15 14  0.0909537922 0.279988895 
    16 15  0.0628012627 0.457795228 
    17 16  0.1669241304 0.047886605 
    18 17  0.2019811994 0.016703619 
    19 18  0.1440124960 0.090764520 
    20 19  0.1104842808 0.197035340 
    21 20  0.1247428178 0.146396407 

我想把所有的名單在一起,使他們在一個數據幀,並最終將其導出爲CSV文件,以便列如下:時滯3,互相關3,p值3,時滯3,互相關.2 ....等。直到p.value.50。

我曾嘗試使用do.call如下,但都沒有成功:

for(i in 3:50) 
    { 
     l1<-crosscor(data[,2], data[,i], lagmax=20) 
     ccdata<-do.call(rbind, l1) 
     cat("Data row", i) 
    } 

我也嘗試了創建數據幀直出,但我剛開滯後列名:

ccdata <- data.frame() 
    for(i in 3:50) 
    { 
     ccdata[i-2:i+1]<-crosscor(data[,2], data[,i], lagmax=20) 
     cat("Data row", i) 
    } 

我在做什麼錯?或者是否有我可以訪問的數據集的在線來源來弄清楚如何做到這一點? Best,

回答

0

data.frames存在轉置方法。如果「crosscor」是對象的名稱,請試試這個:

tcrosscor <- t(crosscor) 
write.csv(tcrosscor, file="my_crosscor_1.csv") 

第一行是Lag的;第二行是Cross.Correlation的;第三行是P.value的。我想你可以進一步「扁平化」,所以它會完全「水平」或「寬」。看起來很痛苦,但這可能會像這樣:

single_line <- as.data.frame(unlist(tcrosscor)) 
names(single_line) <- paste("Lag", 'Cross.Correlation', 'P.value'), rep(1:50, 3), sep=".") 
write.csv(single_line, file="my_single_1.csv") 
+0

對不起,我覺得我的原始問題不清楚。我實際上發現我認爲最簡單的方法就是將我創建的每個新數據集與前一個數據集進行合併,而不是嘗試附加到新數據集。 – orange1