Domanda

Desidero eseguire la manipolazione della data di un file CSV importato con la prima colonna che è una colonna di data nel formato gg/mm/aaaa e desidero utilizzare R o Octave per questo poiché dopo questa manipolazione della data dovrò fare varie matrici /operazioni vettoriali sul resto dei dati, a seconda di queste date.

Le date nel file CSV importato NON includeranno i fine settimana e ci saranno invariabilmente anche altre date mancanti e quello che desidero fare è controllare il file e inserire tutte queste date mancanti più i fine settimana in modo tale che la colonna della data sia completamente contigua dall'inizio al fine, senza date mancanti e con valori vuoti "fittizi" associati a queste date inserite da scrivere opportunamente nella matrice risultante.Quale tra R o Octave dovrei usare per facilitare questa operazione?So che usare Octave per fare questo sarebbe molto complicato, ma non conosco R.Alla fine tutte le date e i dati verranno scritti in un altro file di testo con nome per il successivo tracciamento in Gnuplot.

Inoltre, se qualcuno potesse darmi suggerimenti su quali funzioni di data dovrei utilizzare, come affrontare questo problema, ecc.sarebbe grandioso.

È stato utile?

Soluzione

Sembra che tu abbia a che fare con i dati finanziari. Lo zoo dei pacchetti R, XTS e QuantMod dovrebbero probabilmente essere rivisti perché offrono una soluzione lavorata alle comuni attività di elaborazione dei dati in questo settore. Ci sono altri pacchetti che definiscono i calendari finanziari. C'è anche una mailing list R-SIG dedicata a questo argomento. Anche se stai trattando con qualche altro scenario del mondo reale che ha dati limitati ai giorni feriali non per le festività, troverai comunque funzionalità utili in quei pacchetti per l'attività che tu (piuttosto vagamente) hai delineato.

Fare una ricerca su SO per [r] calendario finanziario" emette Questo successo potenzialmente rilevante così come molti altri.

Altri suggerimenti

Puoi manipolare le date in entrambi, quindi si riduce principalmente alla preferenza personale per la lingua.

È passato un po 'di tempo da quando ho usato Octave, ma uso regolarmente R e Matlab e dei due preferisco personalmente per la manipolazione dei dati (e le attività di munging dei dati in generale). Se scegli R, il lubridate Il pacchetto è un buon punto di partenza.

Non ho mai usato Octave ma uso R per la manipolazione dei dati, in particolare i file CSV con Data come prima colonna e finora ne sono soddisfatto.La funzione che suggerisco mentre si lavora con date è la funzione strptime.Dopo aver caricato il frame di dati CSV, converti il ​​carattere della data fino ad oggi.Questo è un esempio:

 % if Date is in the first column
df$Date<-strptime(as.character(df[,"Date"]),tz="CET",format="%d-%m-%Y %H:%M")

è quindi possibile estrarre il giorno, il mese e l'anno utilizzando

year<-format(df$Date,"%Y")
month<-format(df$Date,"%m")
day<-format(df$Date,"%d")

molti altri...a seconda del problema.Ho solo provato a darti un punto di partenza.Buona fortuna!

Supponendo che i dati sembrano:

date,attr1,attr2,attr3
"23/01/2011",1,2,3
"24/01/2011",4,5,6
"25/01/2011",7,8,9
"26/01/2011",10,11,12
"28/01/2011",13,45,55
"31/01/2011",2,2,2

Quindi puoi provare quanto segue:

data<-read.csv("yourfile.csv")
#not easy to insert new rows in data frame. So split data and dates
dates<-as.vector(data[[1]])
data<-as.matrix(data[,2:ncol(data)])
rows<-nrow(data)
for(i in 1:(rows-1)){
  dd<-as.Date(dates[i],"%d/%m/%y%y")
  dd1<-as.Date(dates[(i+1)],"%d/%m/%y%y")
  diff<-dd1-dd
  if (diff>1){
    for (j in 1:(diff-1)){
      new.date<-format(dd+j,format="%d/%m/%y%y")
      dates[length(dates)+1]<-strtrim(paste(new.date,""),10)
      data<-rbind(data,c(-1,-1,-1))
    }
  }
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top