Прежде всего, я merge
два набора данных. Объединение их означает выполнение операции, подобной соединению.
df3 = merge (
df1, df2,
by.x = "stock", by.y = "target stock"
)
df3
- это объединенный набор данных.
Он содержит все df1
и все df2
столбцы и строки. Я сопоставил два набора данных, где выполняется условие stock = target stock
.
Пожалуйста, ознакомьтесь с функцией merge
для получения дополнительной информации (просто наберите ?merge
в консоли R).
df4 = df3
tmp = sapply(
df4[, "date of merger"],
function(d) as.Date(seq(d, length = 2, by = "-6 months")[2])
)
df4[, "date of merger start"] = as.Date(tmp, origin = "1970-01-01")
df4
Затем я добавляю новый столбец. Этот новый столбец вычитает 6 месяцев из date of merger
: я буду использовать его, чтобы проверить, какие строки соответствуют условию
"date of merger -6 months" <= "date" <= "date of merger"
Я храню только строки, в которых выполняется условие:
df5 = subset(
df4, "portfolio holdings" > 0 & "date" <= "date of merger" & "date of merger start" <= "date"
)
df5
Обратитесь к справке subset
(?subset
) для получения более подробной информации.
Вы заявляете, что вас интересуют investor
только различные значения:
unique(df5[, "investor"])
ПРИМЕЧАНИЯ
- У меня возникли некоторые проблемы при тестировании кода, поэтому, возможно, понадобятся некоторые исправления, но именно так я бы лично решил проблему
- Есть много разных решений, которые вы можете найти, я не могу гарантировать вам, что это лучшее
- Код должен быть оптимизирован (избегайте создания бесполезных объектов, таких как
tmp
, df3
и df4
: я добавил их в качестве промежуточных шагов, чтобы облегчить отладку / понимание:)
- Я бы предложил выполнять такие операции (в основном, фильтрацию данных) из БД с использованием SQL