【发布时间】:2015-06-25 05:37:21
【问题描述】:
我有这样的数据数据
Date Closing_price strike_Price Underlying_Value
01-01-2015 12 120 109
01-01-2015 10 110 109
01-01-2015 5 130 109
01-01-2015 3 140 109
01-01-2015 15 100 109
01-01-2015 25 90 109
我想要的只是那些执行价格刚好高于基础价值且略低于基础价值的行。如果Underlying_Value 和strike_Price 匹配,那么我只想要单行。
期望的输出:(在这种情况下)
01-01-2015 10 110 109
01-01-2015 15 100 109
同样,我有不同日期的数据。 Underlying_Value 仅随日期而异。我想为每个日期过滤此类数据并将它们保存为数据框(在单个对象中,而不是为每个日期单独保存)。
我设法编写了代码,但花费了太多时间。观测 82000 大约需要 3 分钟。
我想知道,他们有什么有效的方法吗?
我做了什么:
1) 首先在数据集 df1$money 中创建另一个变量
它成功了,但它花费了太多时间......
我的确切代码是:
atmoney <- function(data) {
Date.i <- unique(data$Date)
len <- length(Date.i)
data$money <- (data$Underlying.Value-data$Strike.Price)/data$Strike.Price
at.first.row <- data[1,]
for(i in 1:len) {
data.f <- data[data$Date==Date.i[i],]
data.f.1 <- data.f[data.f$money >=0,]
data.at.1 <- data.f.1[data.f.1$money==min(data.f.1$money),]
data.f.2 <- data.f[data.f$money <= 0,]
data.at.2 <- data.f.2[data.f.2$money == max(data.f.2$money),]
at.first.row <- rbind(at.first.row,data.at.1, data.at.2)
}
desired_data <- at.first.row[-1,] #removed first row
}
【问题讨论】:
-
刚刚高于和低于的阈值是多少?
-
如果阈值为
10。然后subset(df1, abs(strike_Price - Underlying_Value)<10)对于多个日期,library(dplyr); df1 %>% group_by(Date) %>% filter(abs(strike_Price - Underlying_Value) <10) -
谢谢,但没有阈值。
-
你需要做一个基线来比较。无论如何,我向您展示了一个根据样本数据获得预期结果的选项。
-
我做了什么,我在回答 1 帖子中提到了。问题是它花费了太多时间。我有大约 5 年的数据,每个日期大约有 700 个观察值。我的方法大约需要 3 分钟。