2015-06-21 13 views
5

Mam wiele danych giełdowych, ale w dziwny sposób, nie mogłem znaleźć przykładu, jak przekonwertować je na wynik, co może być pomocne. Oto fragment danychKonwersja wierszy do jednego na podstawie wspólnej nazwy

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

Czy można przekonwertować ten dataframe coś łatwiej jak

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

Odpowiedz

4

Można spróbować dcast od wersji woju data.table tj. v1.9.5+, co może zająć wiele kolumn value.var. Instrukcjami, aby zainstalować wersji rozwojowej są 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

Niestety dopiero teraz mogę zainstalować wersję # v1.9.5 + może muszę zainstalować najpierw GitHub? – Ster32

+0

@ Stef32 Potrzebujesz 'biblioteki (devtools)' najpierw zainstalowanej – akrun

+0

Tak, zrobiłem to. Jest zainstalowany. Daje tylko ostrzeżenie, aby zainstalować narzędzia R, ale ja tego nie zrobiłem. – Ster32

5

Jest to prosty problem przekształcania danych z „długi” na „szeroki”. Oto rozwiązanie baza R używając 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

jak rozumiem d $ t to 4 wartości, a 2 to dwa wiersze w wynikach, które mam. Jak już wspomniałem, jest to przykład w zbiorze danych, w którym nie znam konkretnej liczby nowych wierszy i kolumn. – Ster32

+0

@ Ster32 Właściwie nie wspomniałeś o tym gdziekolwiek. – Thomas

Powiązane problemy