Вот решение, которое работает для xts
:
library(xts)
x <- xts(c(50.97, 49.98, 50.81, 50.48, 50.31, 50.98),as.Date("2005-01-03")+0:5)
x / drop(coredata(x['2005-01-03']))
[,1]
2005-01-03 1.0000000
2005-01-04 0.9805768
2005-01-05 0.9968609
2005-01-06 0.9903865
2005-01-07 0.9870512
2005-01-08 1.0001962
Если у вас есть больше столбцов, каждый из которых представляет собой разные акции, и вы хотите разделить на одну и ту же дату:
сначала преобразуйте в matrix
ваши данные и удалите столбец даты (вы вернете его позже), имейте в виду, что мы используем первую строку для деления.
mat <- as.matrix(d[,-1]) # remove the dates
sweep(mat,2,mat[1, ],`/`) # divide by mat[1, ]. i.e. first row
# aaa bbb
# [1,] 1.0000000 1.000000
# [2,] 0.9805768 2.090909
# [3,] 0.9968609 4.090909
# [4,] 0.9903865 5.090909
# [5,] 0.9870512 7.818182
# [6,] 1.0001962 3.090909
# now we can trasform back to data.frame and cbind() with the dates.
Используемые данные:
tt <- "date aaa bbb
2005-01-03 50.97 11
2005-01-04 49.98 23
2005-01-05 50.81 45
2005-01-06 50.48 56
2005-01-07 50.31 86
2005-01-10 50.98 34"
d <- read.table(text=tt, header=T)