这不是一个真正的统计问题,而是执行实际统计分析之前的数据准备问题。我有一个由稀疏数据组成的数据框。我想“扩展”此数据以包括逐组缺失值的零。
这是数据示例(a
和 b
是定义组的两个因素,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=0
和 t=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
})
merge
与 all.x=TRUE
将使缺失值 NA
,因此需要函数的第二行来替换这些值NA
带有 0。
关于r - R 中的数据帧 "expand"程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9083536/