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
(根据 Stock
和 Year
)是在 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
我需要你的意见来解决这个问题
我有一个来自大数据集的小数据子集。
我的子集和我的原始数据集遵循以下格式:
这里写出来:
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
(根据 Stock
和 Year
)是在 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