r - R 中的数据帧 "expand"程序?

标签 r time-series

这不是一个真正的统计问题,而是执行实际统计分析之前的数据准备问题。我有一个由稀疏数据组成的数据框。我想“扩展”此数据以包括逐组缺失值的零。

这是数据示例(ab 是定义组的两个因素,t 是稀疏时间戳, >x是值):

test <- data.frame(
    a=c(1,1,1,1,1,1,1,1,1,1,1),
    b=c(1,1,1,1,1,2,2,2,2,2,2),
    t=c(0,2,3,4,7,3,4,6,7,8,9),
    x=c(1,2,1,2,2,1,1,2,1,1,3))

假设我想扩展 t=0t=9 之间的值,这就是我希望的结果:

test.expanded <- data.frame(
    a=c(1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1),
    b=c(1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2),
    t=c(0,1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6,7,8,9),
    x=c(1,0,2,1,2,0,0,2,0,0,0,0,0,1,1,0,2,1,1,3))

已为 t 的所有缺失值插入零。这使得它更容易使用。

我有一个快速而肮脏的实现,它对数据帧进行排序并循环遍历其每一行,一次添加缺失的行。但我对这个解决方案并不完全满意。有更好的方法吗?

对于熟悉 SAS 的人来说,它类似于 proc Expand

谢谢!

最佳答案

正如您在对另一个答案的评论中指出的那样,使用 plyr 按组进行操作很容易,它只留下如何“填充”数据集。我的方法是使用merge

library("plyr")

test.expanded <- ddply(test, c("a","b"), function(DF) {
  DF <- merge(data.frame(t=0:9), DF[,c("t","x")], all.x=TRUE)
  DF[is.na(DF$x),"x"] <- 0
  DF
})

mergeall.x=TRUE 将使缺失值 NA,因此需要函数的第二行来替换这些值NA 带有 0。

关于r - R 中的数据帧 "expand"程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9083536/

相关文章:

r - tbl_df 在 S4 类中转换为列表

r - LastAssigned(在 R 中,箭头的最后一个右边(<-)并返回它)

r - 如何重复计算许多单列并将输出存储在 R 中的新数据框中?

sql - Postgresql: append 两个具有不同列的表

python - Pandas 查找半小时数据帧索引的每日系列值

r - 使用与 R 数据框中多个时间序列的最新日期相对应的值创建条形图

r - 通过排列 R 中的列来最大化矩阵的对角线

r - R 中 character() 和 ""之间的差异

sql - 通过填充前移/LOCF 在 SQL 中的一系列连续行上插补一列?

r - 为什么从 geom_point 切换到 geom_line 时数据似乎丢失了?