【问题标题】:How to extract longitudinal time-series data from a dataframe in R for time-series analysis and imputation如何从 R 中的数据框中提取纵向时间序列数据以进行时间序列分析和插补
【发布时间】:2011-10-02 05:34:16
【问题描述】:

感谢joran 帮助我将previous question 中的数据分组,我想在R 中缩小数据框,以便对数据进行时间序列分析。

现在我想进一步从数据框中提取数据。数据框由 6 列组成。第 1 到 5 列各有离散的名称/值,例如地区、性别、年、月和年龄组。第六列是该特定组合的死亡人数。摘录如下所示:

             District  Gender Year Month    AgeGroup TotalDeaths
             Northern    Male 2006    11        01-4           0
             Northern    Male 2006    11       05-14           1
             Northern    Male 2006    11         15+          83
             Northern    Male 2006    12           0           3
             Northern    Male 2006    12        01-4           0
             Northern    Male 2006    12       05-14           0
             Northern    Male 2006    12         15+         106
             Southern  Female 2003     1           0           6
             Southern  Female 2003     1        01-4           0
             Southern  Female 2003     1       05-14           3
             Southern  Female 2003     1         15+         136
             Southern  Female 2003     2           0           6
             Southern  Female 2003     2        01-4           0
             Southern  Female 2003     2       05-14           1
             Southern  Female 2003     2         15+         111
             Southern  Female 2003     3           0           2
             Southern  Female 2003     3        01-4           0
             Southern  Female 2003     3       05-14           1
             Southern  Female 2003     3         15+         141
             Southern  Female 2003     4           0           4

我是时间序列的新手,我想我需要这样做来分析数据:我需要提取较小的“时间序列”数据对象,这些数据对象是唯一的纵向数据。例如,从上面的数据框中,我想为每个地区、性别和年龄组提取像这样的更小的数据对象:

             District  Gender Year Month    AgeGroup TotalDeaths
             Northern    Male 2003     1        01-4           0
             Northern    Male 2003     2        01-4           1
             Northern    Male 2003     3        01-4           0
             Northern    Male 2003     4        01-4           3
             Northern    Male 2003     5        01-4           4
             Northern    Male 2003     6        01-4           6
             Northern    Male 2003     7        01-4           5
             Northern    Male 2003     8        01-4           0
             Northern    Male 2003     9        01-4           1
             Northern    Male 2003    10        01-4           2
             Northern    Male 2003    11        01-4           0
             Northern    Male 2003    12        01-4           1
             Northern    Male 2004     1        01-4           1
             Northern    Male 2004     2        01-4           0

             Northern    Male 2006    11        01-4           0
             Northern    Male 2006    12        01-4           0

我在 Excel 中尝试了一些操作,使用这些数据创建数据透视表,然后尝试提取信息字符串 - 但失败了。之后我在 R 中发现了reshape,但我要么不知道代码,要么不应该使用reshape 来执行此操作。

我什至不确定这是否是分析此横截面时间序列数据的正确/方法,即。如果实际上需要另一种格式来使用read.ts()ts()arima() 等函数分析此数据。

我的最终目标是使用这些数据和 amelia2 包及其函数来估算 2007 年和 2008 年某些月份缺少 TotalDeaths 的情况,这些数据当然是缺失的。

任何帮助,如何做到这一点,以及如何解决这个问题的建议将不胜感激。

【问题讨论】:

  • @OSIOISO。你打算运行什么时间序列分析。看看plm 包。我相信如果您将所有内容都保存在一个数据中,那么运行分析会更容易。如果您提供有关您的分析的更多详细信息,我们中的一些人可能会提供帮助
  • @Ramnath,也许我错误地使用了“时间序列分析”。我基本上想使用 2003-2009 年的数据(其中 2007 年和 2008 年的某些月份缺少数据)来估算 2007 年和 2008 年缺少的月份。为此,我无法不使用任何 R 函数来查看TotalDeaths 的季节性和长期趋势。感谢您指出 plm - 我宁愿说数据是面板数据研究。我现在的问题是,如何使用这个“单一数据” - 并将其读入 R - 进行任何时间序列分析。希望这可以澄清。
  • 通常(来自 Stackoverflow 上的所有其他时间序列问题)时间序列数据仅包含日期和数字序列,例如在 this answer 中 - 不在我的数据框中。
  • @OSIOISO。我仍然不明白你问题的最终目标。插补非常棘手,在时间序列中更是如此。估算缺失值是您的最终目标吗?还是您打算使用估算数据进行其他分析?我建议你在你的问题中澄清这一点。也许stats.stackexchange 可能是发布此内容的更好地方,如果您尝试执行的操作存在显着的统计偏差。
  • @OSIOISO。正如您正确指出的那样,您拥有的是面板数据。您可以将数据框中的额外变量视为解释变量,可以解释您尝试研究的时间序列中的一些系统变化。

标签: r statistics time-series


【解决方案1】:

对于如何最好地提取的狭隘问题:

subset(dfrm, subset=(District=="Northern" &  Gender=="Male" &  AgeGroup=="01-4"))

subset 也有一个选择参数来缩小列。我怀疑对您使用的术语“提取”进行搜索只会获得 ?Extract 页面的点击量,令人惊讶的是,该页面没有指向 subset 的链接。 (我从早期版本的 AgeGroup 规范中删除了一个尾随空格。)

【讨论】:

  • 感谢@DWin 的帮助。实际上,我之前曾尝试使用subset - 但由于我不断收到错误而停止尝试。出于某种原因,我遇到了与以前相同的错误:[1] District Gender Year Month AgeGroup TotalDeaths <0 rows> (or 0-length row.names) 我尝试了其他组合,例如使用“东部”作为地区和“女性”,但它继续提供上述输出。你也许知道它为什么不工作?
  • 上述 AgeGroup 规范中的尾随空格可能与您的变量的拼写不匹配。看看修剪它们是否有帮助。
  • 呃 - 我还是有问题。我已经成功使用了subset,但是当我在子集公式中包含District 时,它会给出错误<0 rows> (or 0-length row.names)Viz. 这有效:head(subset(data0306t, Year=="2004" & Month=="8" & Age.Group =="0")) 但不是这个head(subset(data0306t, District=="Eastern" & Age.Group =="0"))
  • 这不是错误,只是 0 行 data.frame。请注意,您对 Age.Group 列的拼写与您发布的内容不同......所以您需要发布类似 str()dput(head(data0306t)) 的内容。
  • 还是不行。我会尝试替代的东西。我确保所有内容、拼写和特定数据框(因为我有不同的数据框具有相同的数据)都是正确的。但是感谢@DWin的帮助
猜你喜欢
  • 2022-01-04
  • 2019-04-22
  • 2023-01-27
  • 2015-07-28
  • 1970-01-01
  • 2022-01-14
  • 2019-07-15
  • 1970-01-01
  • 2021-02-21
相关资源
最近更新 更多