0

我有一些互相关函数crosscor,我想循环遍历数据矩阵中每一列的函数。该函数每次运行时都会输出一些看起来像这样的互相关:

     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 文件中,因此列如下:lags.3、cross-correlation.3、p-value.3、lags。 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)
    }

我究竟做错了什么?或者是否有关于我可以访问的数据集的在线资源来弄清楚如何做到这一点?最好的,

4

1 回答 1

0

data.frames 有一个转置方法。如果“crosscor”是对象的名称,请尝试以下操作:

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

第一行是滞后的;第二行,Cross.Correlation's;第三行 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")
于 2013-07-21T23:10:17.680 回答