R 将一致性数据帧应用于zoo对象

R 将一致性数据帧应用于zoo对象,r,zoo,R,Zoo,我有一个由几个时间序列组成的动物园对象,如下所示: indices <- seq.Date(as.Date('2000-01-01'),as.Date('2005-01-30'),by="year") a <- zoo(rnorm(5), order.by=indices) b <- zoo(rnorm(5), order.by=indices) c <- zoo(rnorm(5), order.by=indices) ts_origin <-

我有一个由几个时间序列组成的动物园对象,如下所示:

indices <- seq.Date(as.Date('2000-01-01'),as.Date('2005-01-30'),by="year")
a <- zoo(rnorm(5), order.by=indices)
b <- zoo(rnorm(5), order.by=indices)
c <- zoo(rnorm(5), order.by=indices)
ts_origin <- merge(a,b,c)
set.seed(123)
tt <- as.Date(ISOdate(2000:2005, 1, 1))
m <- matrix(rnorm(6*3), 6, dimnames = list(NULL, c("a", "b", "c")))
ts_origin <- zoo(m, tt)

df <- data.frame(original = c("a","b","c"),
                 final = c("d","e","f"),
                 ratio = c(10,100,1000))
索引这里是一行,最后的名字是错误的

ts_final <- t(df$ratio * t(ts_origin))

ts_final
#                   a         b          c
#2000-01-01 -5.382213 -12.64773  -513.6408
#2001-01-01 -9.218280 -98.55123 -1826.6430
#2002-01-01  2.114663 -28.58910   290.8008
#2003-01-01 -3.576460 -23.47314  -166.5473
#2004-01-01  6.490508 -36.29317  -398.0389
#2005-01-01 -5.382213 -12.64773  -513.6408
colnames(ts_final) <- df$final
ts_final这里有一行,最后的名字有误

ts_final <- t(df$ratio * t(ts_origin))

ts_final
#                   a         b          c
#2000-01-01 -5.382213 -12.64773  -513.6408
#2001-01-01 -9.218280 -98.55123 -1826.6430
#2002-01-01  2.114663 -28.58910   290.8008
#2003-01-01 -3.576460 -23.47314  -166.5473
#2004-01-01  6.490508 -36.29317  -398.0389
#2005-01-01 -5.382213 -12.64773  -513.6408
colnames(ts_final) <- df$final
ts_final1)映射/合并

使用
Map
迭代
final
original
ratio
执行所需产品,生成动物园对象列表
L
。请注意,
Map
fun
之后的第一个参数中获取名称。然后合并构成zoo对象的列表组件
ts_final

fun <- function(f, o, r) ts_origin[, o] * r
L <- with(df, Map(fun, final, original, ratio))
ts_final <- do.call("merge", L)
2)扫描

另一种方法是
清除
比率,适当设置名称,给出与(1)相同的结果

3)代表

设置名称并乘以适当重复的比率,得到与(1)相同的结果

nr1)映射/合并

使用
Map
迭代
final
original
ratio
执行所需产品,生成动物园对象列表
L
。请注意,
Map
fun
之后的第一个参数中获取名称。然后合并构成zoo对象的列表组件
ts_final

fun <- function(f, o, r) ts_origin[, o] * r
L <- with(df, Map(fun, final, original, ratio))
ts_final <- do.call("merge", L)
2)扫描

另一种方法是
清除
比率,适当设置名称,给出与(1)相同的结果

3)代表

设置名称并乘以适当重复的比率,得到与(1)相同的结果

nr
set.seed(123)
tt <- as.Date(ISOdate(2000:2005, 1, 1))
m <- matrix(rnorm(6*3), 6, dimnames = list(NULL, c("a", "b", "c")))
ts_origin <- zoo(m, tt)

df <- data.frame(original = c("a","b","c"),
                 final = c("d","e","f"),
                 ratio = c(10,100,1000))