Мы конвертируем «дату» в класс Date
, format
в формат «месяц-год» на шаге group_by
вместе с «фирмами» и применяем cov
library(dplyr)
library(lubridate)
df %>%
group_by(date = format(dmy(date), '%b-%y'), firms) %>%
summarise(cov = cov(return, mkreturn))
Или аналогичный вариант с data.table
library(data.table)
setDT(df)[, .(cov = cov(return, mkreturn)),
.(date = format(as.Date(date, '%d/%m/%Y'), '%b-%y'), firms)]
# date firms cov
#1: Jan-88 A 1.727273
#2: Jan-88 B 1.653680
Или с base R
с использованием split
lst1 <- split(df, list(df$firms, format(as.Date(df$date, '%d/%m/%Y'),
'%b-%y')), drop = TRUE)
sapply(lst1, function(x) cov(x$return, x$mkreturn))