【问题标题】:R: How to name a column in a time series when the column name is NULLR:当列名为NULL时如何命名时间序列中的列
【发布时间】:2021-05-22 10:44:48
【问题描述】:

这是我的数据框:

year month count
2008 2 16
2008 3 36

我把它转换成这样的时间序列:

data <- ts(data$count, start = c(2008,2), frequency = 12)

在时间序列中,列名 'count' 变为 NULL:

> colnames(data)
NULL

并且我无法使用“常规”方法colnames(data) &lt;- c("count") 更改它,因为我收到一个错误,我正在尝试更改小于 2 维的对象的列名。例如,如果我保留列“年”,它不会将列名更改为 NULL。但我不需要那个,我宁愿删除它。在转换为时间序列之后删除列“年”也会将“计数”的列名更改为 NULL。

有什么想法吗?关于如何避免重命名为 NULL 或如何从 NULL 重命名为任何其他名称。

编辑:我错误地假设 ts 对象通常有一个列名。因为我确实有另一个 ts 确实有一个专栏。修复此问题后,我的时间序列现在都没有 colnames 并且一切都很好。谢谢。

【问题讨论】:

  • 时间序列对象不是 data.frame。它没有colnames()names()。它只有日期和值。从 2008 年 2 月开始,你用值 16 和 36 填充它。
  • @MartinWettstein 谢谢,我现在意识到我的错误是在另一个 ts 中,它确实有一个列:时间序列 [1:194, 1]。我修复了这个问题,现在我的 ts 都没有 colnames 了——我之前认为这是错误的。

标签: r time-series


【解决方案1】:

我认为,您要做的是将您的列count 的类更改为时间序列。但是,您在语法中所做的是用这一列覆盖对象datats() 对象没有任何列和列名,它只是一个特殊的向量。

如果你写:

data$count <- ts(data$count, start = c(2008,2), frequency = 12)

您只需将列count 转换为时间序列。您的数据没有明显变化,但该列现在是一个时间序列:

> data
  Year Month count
1 2008   Feb    16
2 2008   Mar    36

> data$count
     Feb Mar
2008  16  36

现在,您可以使用这一列并且仍然拥有您的数据。

【讨论】:

  • 我试图覆盖对象数据。那是故意的。但是,我的印象是 ts 确实有列名,因为我确实有另一个具有列的时间序列对象:时间序列 [1:194, 1] 而不是时间序列 [1:194]。在您回答后,我意识到错误出在其他 ts.我解决了这个问题,现在我的 ts 都没有任何 colnames。
猜你喜欢
  • 2015-06-27
  • 2020-09-20
  • 2012-10-28
  • 2021-01-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-13
  • 1970-01-01
相关资源
最近更新 更多