Stock 和 R 需要您的意见

Stock and R need your opinions

我需要你的意见来解决这个问题

我有一个来自大数据集的小数据子集。

我的子集和我的原始数据集遵循以下格式:

这里写出来:

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

假设我的子集是我专门 select 编辑的一组。

我想把这个子集命名为 (MoneyFA)。我想将 MoneyFA 中的价格设置为 T0。假设前一年的最高价格是 T-1,前一年是 t-2。而后年的价格是T1,后年是T2。

现在,我如何编写一个程序来获取我的具有可变日期的子集,然后它开始针对主数据集(其中包含大量数据,我们将其命名为 Moneypool)搜索 T 值。假设我们的 window 是 T0 之前 10 年和之后 10 年。 (记住,一年可能有某家公司的主数据集中的几个价格,我们需要它select那一年的最高价)

我想让它给我一个table或类似这样的矩阵(如果主数据集中没有值,它可以保持为空或NA):

这里写出来:

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

这里是一个使用 data.table 的例子。 Year 是从 Date 中提取的,然后最大值 Price(根据 StockYear)是在 Years 上计算的 10 年内year_zero。然后相对于 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