我有下面的代码工作。但一定有更好的方法。
file <- "http://s3.amazonaws.com/assets.datacamp.com/production/course_1127/datasets/tmp_file.csv"
x <- read.csv(file = file)
ts <- xts(x = x, order.by = as.Date(rownames(x), "%m/%d/%Y"))
cd=coredata(ts)
for (j in 1:length(names(ts))) cd[,j]<-cd[,j]/cd[1,j]
for (j in 1:length(names(ts))) ts[,j]<-cd[,j]
您可以通过重复行来从所需的缩放行创建一个矩阵,然后将原始数据除以该缩放矩阵:
> ts <- xts(x = x, order.by = as.Date(rownames(x), "%m/%d/%Y"))
> ts
a b
2015-01-02 1 3
2015-02-03 2 4
> m <- matrix(rep(coredata(ts)[1,], nrow(ts)), ncol = 2, byrow = TRUE)
> m
[,1] [,2]
[1,] 1 3
[2,] 1 3
> coredata(ts) <- coredata(ts) / m
> ts
a b
2015-01-02 1 1.00000
2015-02-03 2 1.33333
>
那样虽然简洁,但是牺牲了内存。 @TarJae 的答案同样好,但内存效率可能很高,所以我已经投票了。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)