2015-06-21 86 views
5

我有很多股票數據,但以一種奇怪的方式,我無法找到示例如何將它們轉換爲可能有用的輸出。下面是數據根據通用名稱將行轉換爲一個

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

的片斷是否有可能這個數據幀轉換爲更方便的東西像

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

回答

4

您可以從data.table即devel的版本試試dcastv1.9.5+,它可以採用多個value.var列。說明安裝devel的版本是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

遺憾的是到現在爲止,我可以安裝的版本#v1.9.5 +也許我得先安裝Github上? – Ster32

+0

@ Stef32你需要'庫(devtools)'先安裝 – akrun

+0

是的,我做到了。它已經安裝。它只給出了安裝R工具的警告,但我沒有做到。 – Ster32

5

這是「長」到「寬」重塑數據的一個簡單的問題。下面是使用reshape一個基礎R解決方案:

# 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

據我所知d $ t是4個值,2是結果中的兩行。正如我提到的這是數據集中的一個例子,我不知道新行和列的具體數量。 – Ster32

+0

@ Ster32你其實並沒有在任何地方提及。 – Thomas