Делает ли это то, что вы хотите?
sd_up_to_date = data.frame(lapply(my_data[,-1],function(ret) sapply(seq_along(ret),function(time_point) sd(ret[1:time_point]))))
str(sd_up_to_date)
Вывод:
'data.frame': 5 obs. of 2 variables:
$ Return_1: num NA 0.0707 0.1 0.0957 0.0837
$ Return_2: num NA 0.0707 0.2082 0.1893 0.2345
Объяснение:
lapply(my_data[,-1],function(ret) ...
= учитывать каждый из элементов my_data, кроме первый (то есть, «возврат»)
sapply(seq_along(ret),function(time_point) sd(ret[1:time_point]))
= учитывает каждый момент времени по каждому вектору возвратов и вычисляет стандартное отклонение (sd ()) от первого элемента до этого
data.frame( ... )
= превратить все это в data.frame
Обратите внимание, что sd для единственного момента времени - это NA, поэтому все первые элементы - это NA.
После этого 0.0707 сд (c (0,2,0,3)), 0,1 - сд (c (0,2,0,3,0,4)) и т. д ...