子集化和组合/匹配数据

时间:2012-11-26 23:29:38

标签: r

我有一个包含4列的数据框...日期,小时,位置,值。

我想对数据做的是为每个唯一的日期/小时/位置提供摘要统计。这似乎很容易,因为我可以做到

x <- subset(my.df[,4], 
            my.df[,2]==(some parameter) & my.df[,3]==(another parameter)
           ) 

然后从x获取我想要的任何摘要统计信息。然而,棘手的部分是我还希望从上述值的每个差异中获得汇总统计数据。因此,例如,当loc=1value loc=2 hour=1my.df timevar=loctimevar=hour 'data.frame': 9493401 obs. of 4 variables: $ Loc : int 1 1 1 1 1 1 1 1 1 1 ... $ Date: POSIXct, format: "2010-10-29" "2010-10-29" ... $ Hour : int 1 2 3 4 5 6 7 8 9 10 ... $ Value : num 7.63 4.07 4.9 1.61 0.34 -5.23 2.11 2.39 7.2 4.41 ... {{1}}时{{1}},{{1}}时,{{1}}可能会有差异。但是,任何一个位置都可能有或没有错过天数。我有一个可能会起作用的想法是重塑{{1}}两倍。首先使用{{1}}使其变宽,然后使用{{1}}重新整形,以便我将使用包含Date,value.1.1,value.1.2等列的wide.df,其中第一个整数是loc和第二个整数是小时,每行是唯一的日期。

是否有更直接的做法,不会涉及20分钟的重塑(最初的df是大约9493401行,有4个变量,然后我将它拉伸到720行,14857列? @Brandon:这是str输出。我还没有尝试过你的建议。

{{1}}

1 个答案:

答案 0 :(得分:1)

来自dcast的{​​{1}}在这方面看起来非常活泼:

reshape2

您还可以执行诸如loc / hour计数之类的事情

library(reshape2)
dat <- data.frame(date=sample(1:100,9493401,replace=TRUE),
                  hour=rep(1:24,1000000)[1:9493401],
                  loc=rep(letters[1:9],1054823)[1:9493401],
                  value=rnorm(9493401))     

dcast(dat,date + hour ~ loc) 

如果您想要一个特定于您案例的答案,您需要提供更多信息。