2015-06-21 10 views
5

Ho molti dati di magazzino ma in un modo strano che non sono riuscito a trovare un esempio su come convertirli nell'output che potrebbe essere utile. Ecco un frammento di datiConverti file in uno basato su un nome comune

stockname,value,prediction 
Yahoo,32,12 
Yahoo,21,12 
Yahoo,30,10 
Yahoo,56,19 
Google,32,10 
Google,22,30 

E 'possibile convertire questo dataframe a qualcosa di più facile come

stockname value1 value2 value3 value4 prediction1 prediction2 prediction3 prediction4 
Yahoo  32  21  30  56  12   12   10   19 
Google  32  22     10   10 

risposta

4

Si può provare dcast dalla versione devel di data.table es. v1.9.5+, che può richiedere più colonne value.var. Istruzioni per installare la versione devel sono here

library(data.table)#v1.9.5+ 
setDT(df1)[, indx:=1:.N, stockname]#create a sequence index by stockname 
dcast(df1, stockname~indx, value.var=c('value', 'prediction')) 
# stockname value_1 value_2 value_3 value_4 prediction_1 prediction_2 
#1: Google  32  22  NA  NA   10   30 
#2:  Yahoo  32  21  30  56   12   12 
# prediction_3 prediction_4 
#1:   NA   NA 
#2:   10   19 
+0

Purtroppo fino ad ora posso installare la versione v1.9.5 # + forse devo installare prima il Github? – Ster32

+0

@ Stef32 È necessario 'library (devtools)' installato per primo – akrun

+0

Sì, l'ho creato. Ha installato. Fornisce solo un avvertimento per installare gli strumenti R ma non l'ho fatto. – Ster32

5

Si tratta di un semplice problema di rimodellare i dati da "lungo" per "largo". Ecco una soluzione di base R utilizzando reshape:

# load data 
d <- read.csv(text="stockname,value,prediction 
Yahoo,32,12 
Yahoo,21,12 
Yahoo,30,10 
Yahoo,56,19 
Google,32,10 
Google,22,30", header = TRUE) 

# create a time indicator variable 
d$t <- c(1:4, 1:2) 
# reshape 
reshape(d, idvar="stockname", direction="wide", timevar = "t") 
# stockname value.1 prediction.1 value.2 prediction.2 value.3 prediction.3 value.4 prediction.4 
# 1  Yahoo  32   12  21   12  30   10  56   19 
# 5 Google  32   10  22   30  NA   NA  NA   NA 
+0

come posso capire d $ t sono i 4 valori e 2 sono le due righe nel risultato che ho. Mentre cito questo è un esempio nel set di dati, non conosco lo specifico numero delle nuove righe e colonne. – Ster32

+0

@ Ster32 In realtà non l'hai menzionato da nessuna parte. – Thomas

Problemi correlati