【问题标题】:Expanding long format time series data with missing Rows扩展缺少行的长格式时间序列数据
【发布时间】:2017-04-21 19:54:08
【问题描述】:

假设我有一个数据框:

df <- data.frame(group = c('A','A','A','B','B','B','C','C','C'), 
time = c(1,2,4,1,2,3,5,7,8), 
data = c(5,6,7,8,9,10,1,2,3))

我想要做的是将数据插入序列中缺少的数据框中。因此,在上面的示例中,我缺少 A 组的时间 = 3 的数据,B 组的时间 = 4 和 C 组的时间 =6。我基本上想将 NA 放在数据列的位置。 我将如何添加这些额外的行? 我需要一个通用的解决方案 注意:我编辑了问题,因为之前有一个错误 我们不能假设每个组只有 4 个观察值。

目标是:

  df <- data.frame(group = c('A','A','A','A','B','B','B','C','C','C','C'), 
    time = c(1,2,3,4,1,2,3,5,6,7,8), 
    data = c(5,6,NA,7,8,9,10,1,NA,2,3))

【问题讨论】:

  • “因此,在上面的示例中,我丢失了 A 组时间 = 3、B 组时间 = 4 和 C 组时间 =6 的数据。” - 你怎么会知道这事?是否有另一种数据结构可以告诉您这一点,或者是否有一个标准可以让您从显示的数据框中推断出这一点?
  • 一个选项如下:df.fill = merge(df, expand.grid(group=unique(df$group), time=min(df$time):max(df$time)), all=TRUE)expand.grid 创建一个数据框,其中包含 grouptime 的所有可能组合。您将其合并到原始数据框中作为完全连接(all=TRUE 负责处理)为您提供缺失组合的新行。
  • 这个问题似乎与thisthisthis 和可能的其他 SO 问题重复。

标签: r time-series


【解决方案1】:

这是使用data.table 的一个选项。将'data.frame'转换为'data.table'(setDT(df)),将'group'分组的数据集从min扩展到'time'的max并加入on'group'和'时间'列。

library(data.table)
setDT(df)[df[, .(time = min(time):max(time)) , by = group], on = c("group", "time")]
#    group time data
# 1:     A    1    5
# 2:     A    2    6
# 3:     A    3   NA
# 4:     A    4    7
# 5:     B    1    8
# 6:     B    2    9
# 7:     B    3   10
# 8:     C    5    1
# 9:     C    6   NA
#10:     C    7    2
#11:     C    8    3

【讨论】:

  • 我的问题有错别字
猜你喜欢
  • 1970-01-01
  • 2022-10-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-06
  • 1970-01-01
  • 2015-09-19
  • 2015-04-03
相关资源
最近更新 更多