我有一些交叉相关函数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 ,滞后.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)
}
我做错了什么?或者是否有我可以访问的数据集的在线资源,以了解如何执行此操作?最好,
答案 0 :(得分: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")