r - 将序列添加到现有时间序列的最有效方法是什么?
问题描述
我想将新系列列绑定到现有时间系列。以下是 help(ts) 中的示例:
z <- ts(
matrix(rnorm(300), 100, 3),
start = c(1961, 1),
frequency = 12
)
这是我发现在保留名称和时间的同时添加到系列中的唯一方法:
z1 <- ts(
cbind(
z,
runif(dim(z)[1])
),
start(z),
names = c(dimnames(z)[[2]], 'unif')
)
我怀疑有一种更清洁的方法可以做到这一点(就像 data.frames 的工作方式一样?)。
解决方案
转换为xts
and transform
(用于R 4.1.0
运算符|>
)
library(xts)
z1 <- as.xts(z) |>
transform(unif = runif(dim(z)[1]))
-输出
> head(z1)
Series.1 Series.2 Series.3 unif
Jan 1961 0.58124800 0.1510926 1.0826555 0.2552968
Feb 1961 1.15737740 0.8661810 0.3916422 0.5525945
Mar 1961 -0.23185935 0.2858634 0.8118146 0.3055733
Apr 1961 -1.72068316 -0.6347280 0.1287224 0.4017409
May 1961 -2.07815044 -0.5623785 -1.8947997 0.3404939
Jun 1961 -0.09922355 -0.6606838 1.2231682 0.5405788
另一种选择是as_tsibble
library(tsibble)
library(dplyr)
library(tidyr)
as_tsibble(z) %>%
pivot_wider(names_from = key, values_from = value) %>%
mutate(unif = runif(n()))
# A tsibble: 100 x 5 [1M]
index `Series 1` `Series 2` `Series 3` unif
<mth> <dbl> <dbl> <dbl> <dbl>
1 1961 Jan 0.581 0.151 1.08 0.632
2 1961 Feb 1.16 0.866 0.392 0.698
3 1961 Mar -0.232 0.286 0.812 0.631
4 1961 Apr -1.72 -0.635 0.129 0.912
5 1961 May -2.08 -0.562 -1.89 0.750
6 1961 Jun -0.0992 -0.661 1.22 0.370
7 1961 Jul 0.450 1.01 -0.0622 0.605
8 1961 Aug 0.328 -1.28 -0.729 0.221
9 1961 Sep 0.511 -0.675 -0.387 0.489
10 1961 Oct -0.943 0.0116 0.00400 0.630
# … with 90 more rows
推荐阅读
- javascript - 如何在同一页面的表格中显示表单数据
- regex - 在 PostgreSQL 11.0 中提取带有数字和字母的字符串
- kubernetes - 无法将 configmap 数据作为环境变量添加到 pod。它说无效的变量名不能添加为环境变量
- python - Kivy 应用程序未在 Windows 中使用 pyinstaler 转换为 onefile 格式
- nlp - StanfordNLP:无法用 7-class-ner 识别日期
- c# - 等待 AsyncEventHandler
- 只等待最后一次注册 - sql - SQL 中计算之间的日期
- django - Django Admin Password 字段显示纯文本
- azure-ad-b2c - msal Angular 中的 aquireTokenSilent 使用 Azure 自定义策略失败
- sql - 如何在oracle sql中对已经分组的数据集进行分组