Ho una funzione di cross correlazione crosscor,e vorrei scorrere la funzione per ciascuna delle colonne che ho nella mia matrice di dati. La funzione restituisce una correlazione incrociata simile a questa ogni volta che viene eseguita:
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
Vorrei mettere insieme tutte le liste cosìsono in un frame di dati e alla fine li esportano in un file CSV, quindi le colonne sono le seguenti: lags.3, cross-correlation.3, p-value.3, lags.3, cross-correlation.2 ... .eccetera. fino a p.value.50.
Ho provato a usare do.call come segue, ma non ho avuto successo:
for(i in 3:50)
{
l1<-crosscor(data[,2], data[,i], lagmax=20)
ccdata<-do.call(rbind, l1)
cat("Data row", i)
}
Ho anche provato a creare il frame di dati, ma sto solo ottenendo i nomi delle colonne di lag:
ccdata <- data.frame()
for(i in 3:50)
{
ccdata[i-2:i+1]<-crosscor(data[,2], data[,i], lagmax=20)
cat("Data row", i)
}
Che cosa sto facendo di sbagliato? O c'è una fonte online su set di dati a cui potrei accedere per capire come farlo? Migliore,
risposte:
0 per risposta № 1Esiste un metodo di trasposizione per data.frames. Se "crosscor" è il nome dell'oggetto, prova questo:
tcrosscor <- t(crosscor)
write.csv(tcrosscor, file="my_crosscor_1.csv")
La prima fila sarebbe il Lag, la seconda fila,il Cross.Correlation "s, la terza riga il P.value" s. Suppongo che potresti "appiattirlo" ulteriormente in modo che sia interamente "orizzontale" o "ampio". Sembra doloroso ma potrebbe essere qualcosa di simile:
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")