/ / R e aggiungendo ai frame di dati - r

R e aggiungendo ai frame di dati - r

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 № 1

Esiste 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")