Примите данные, воспроизводимые в примечании в конце, а также предположите, что каждая дата присутствует хотя бы в одной акции (но не обязательно должна присутствовать в какой-либо конкретной акции). 252 обычно используется в течение года, который, вероятно, достаточно близок для большинства применений; однако, учитывая длину данных в вопросе, мы используем 2 для этого примера:
library(zoo)
z <- read.zoo(DF, split = "name")
r <- rollapplyr(z, 2, sd, na.rm = TRUE)
aggregate(r, as.yearmon, tail, 1)
## A B C
## Jan 1985 NA 0.01626346 0.01272792
Примечание
Lines <- "
date name return
1985-01-01 A -0.044
1985-01-01 C 0.038
1985-01-02 A 0.041
1985-01-02 B -0.005
1985-01-02 C -0.052
1985-01-03 B 0.018
1985-01-03 C -0.034"
library(zoo)
DF <- read.table(text = Lines, header = TRUE)