2017-03-27 50 views
-1

我需要你的意見關於如何解決這個問題股票和R需要你的意見

我有一個大型數據集的小數據子集。

我的子集,並且我的原始數據集的格式如下:

here is a picture of how it looks

這裏寫出來:

Stock Date Price 
Pfizer 18-Aug-2009 18.8 
Yahoo 19-Aug-2012 27.1 
Facebook 20-Aug-2014 77.14 
Amazon 21-Aug-2014 683.66 
Merck 22-Aug-2005 22.9 
Ford 23-Aug-2003 20.1 

比方說,我的子集,是我專門挑選了一套。

我想採取這個子集,讓我們命名它(MoneyFA)。我想將MoneyFA中的價格設置爲T0。假設前一年的最高價格是T-1,而前一年的最高價格是t-2。而一年後的價格是T1,而後一年是T2。

現在,我該如何編程一個程序,該程序需要具有可變日期的子集,然後開始對T值的主數據集(其中有大量數據並將其命名爲Moneypool)進行搜索。而且讓我們說窗口是T0之前10年和10年之後。 (請注意,一年中某公司的主要數據集可能有多個價格,我們需要它來選擇當年的最高價格)

我希望它給我一張類似於這(如果有一個在主數據組沒有值,它可以被保持爲空或NA):

Here is a picture of how it looks

這被寫出:

Stock T-10 T-9 T-8 T-7 T-6 T-5 T-4 T-3 T-2 T-1 T0 T+1 T+2 T+3 T+4 T+5 T+6 T+7 T+8 T+9 T+10 
Pfizer 37.12 24.9  19.23  27.01 21.05 17.12 19.88 17.9 18.8 20.91 23.4  24.9       
Yahoo   9.8 18.9 19.7  12.5 22.6 15.8  27.1           
Facebook        35.86 49.62 63.38 77.14 90.9          
Amazon    208.9 533.42 558.46 600.2 608.54 700.1 658.62 683.66 708.7 733.74 809.11       
Merck 41.1 39.28 37.46 35.64 33.82 32 30.18 28.36 26.54 38.7 22.9 21.08 29.8         
Ford 66.1 61.5 56.9 52.3 47.7 43.1 38.5 33.9 29.3 24.7 20.1 15.5 10.9 6.3 1.7 4.2 7.3 8.9 10.5 12.1 11.8 
+0

你能提供一個[再現的示例]( http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example)? – jsb

回答

0

下面是使用data.table一個例子。從Date中提取Year,然後在的10年內計算Years的最大Price(每StockYear)。然後年表示相對於year_zero(在T)和結果然後cast以寬格式:

library(data.table) 
d <- structure(list(Stock = c("Pfizer", "Yahoo", "Facebook", "Amazon", 
"Merck", "Ford"), Date = c("18-Aug-2009", "19-Aug-2012", "20-Aug-2014", 
"21-Aug-2014", "22-Aug-2005", "23-Aug-2003"), Price = c(18.8, 
27.1, 77.14, 683.66, 22.9, 20.1)), .Names = c("Stock", "Date", 
"Price"), row.names = c(NA, -6L), class = "data.frame") 

setDT(d) 
year_zero <- 2010 
# Extract Year from Date 
d[, Year := as.integer(substr(Date, start = 8, 12))] 
# Filter to include year_zero +/- 10 years and get max price per stock per year 
d <- d[Year >= year_zero - 10 & Year <= year_zero + 10, 
    .(Max_Price = max(Price, na.rm = TRUE)), by = .(Stock, Year)] 
# Add T as interval to year_zero (and convert to factor in order to get all 
# values from -10 to 10 
d[, "T" := factor(Year - year_zero, levels = seq(-10, 10), ordered = TRUE)] 
# Cast to wide format (fill missing values with NA) 
dcast(d, Stock~T, value.var = "Max_Price", drop = FALSE) 
# Cast to wide format (fill missing values with "") 
dcast(d, Stock~T, value.var = "Max_Price", drop = FALSE, fun.aggregate = paste0, 
    fill = "") 

第一dcast的輸出是:

 Stock -10 -9 -8 -7 -6 -5 -4 -3 -2 -1 0 1 2 3  4 5 6 7 8 9 10 
1: Amazon NA NA NA NA NA NA NA NA NA NA NA NA NA NA 683.66 NA NA NA NA NA NA 
2: Facebook NA NA NA NA NA NA NA NA NA NA NA NA NA NA 77.14 NA NA NA NA NA NA 
3:  Ford NA NA NA 20.1 NA NA NA NA NA NA NA NA NA NA  NA NA NA NA NA NA NA 
4: Merck NA NA NA NA NA 22.9 NA NA NA NA NA NA NA NA  NA NA NA NA NA NA NA 
5: Pfizer NA NA NA NA NA NA NA NA NA 18.8 NA NA NA NA  NA NA NA NA NA NA NA 
6: Yahoo NA NA NA NA NA NA NA NA NA NA NA NA 27.1 NA  NA NA NA NA NA NA NA 
+0

這看起來很好,唯一的是,T0應該由我分配。所以第一張圖片實際上包含了T0值。所以它與一年沒有關係。非常感謝Kristoffer。 – Nemo

+0

不客氣!如果這是你想要的,你可以使用year_zero變量來指定T0的年份。如果您不想要T0的任何數據,則可以將過濾更改爲d [Year> = year_zero - 10&Year <= year_zero + 10&Year!= year_zero,....]。然後你可以自己分配數據給T0。 –

+0

你太棒了,先生!我會讓你知道它是怎麼回事。 – Nemo