Ich habe einige Kreuzkorrelationsfunktion Crosscor,und ich möchte die Funktion für jede der Spalten, die ich in meiner Datenmatrix habe, durchlaufen. Die Funktion gibt eine Kreuzkorrelation aus, die bei jeder Ausführung ungefähr so aussieht:
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
Ich würde gerne alle Listen zusammenstellenSie sind in einem Datenrahmen und exportieren sie schließlich in eine CSV-Datei, so dass die Spalten wie folgt sind: lags.3, Kreuzkorrelation.3, p-Wert.3, lags.3, Kreuzkorrelation.2 ... .etc. bis p.value.50.
Ich habe versucht, do.call wie folgt zu verwenden, war aber nicht erfolgreich:
for(i in 3:50)
{
l1<-crosscor(data[,2], data[,i], lagmax=20)
ccdata<-do.call(rbind, l1)
cat("Data row", i)
}
Ich habe auch versucht, gerade den Datenrahmen gerade zu verursachen, aber erhalte gerade die Verzögerungsspaltennamen:
ccdata <- data.frame()
for(i in 3:50)
{
ccdata[i-2:i+1]<-crosscor(data[,2], data[,i], lagmax=20)
cat("Data row", i)
}
Was mache ich falsch? Oder gibt es eine Online-Quelle zu Datensätzen, auf die ich zugreifen könnte, um herauszufinden, wie das geht? Beste,
Antworten:
0 für die Antwort № 1Es gibt eine Transpose-Methode für data.frames. Wenn "crosscor" der Name des Objekts ist, versuchen Sie Folgendes:
tcrosscor <- t(crosscor)
write.csv(tcrosscor, file="my_crosscor_1.csv")
Die erste Reihe wäre die Lag 's, die zweite Reihe,die Kreuzkorrelation "s; die dritte Reihe der P.value" s. Ich nehme an, Sie könnten es weiter "abflachen", so dass es ganz "horizontal" oder "breit" wäre. Scheint schmerzhaft, aber das könnte etwa so aussehen:
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")