1

R動物園のオブジェクトがあります。Zoo オブジェクト (z) は日付でインデックス付けされ、複数の列があります。

  • V1 (集計値は「選択された」行のすべての値の合計です)
  • V2 (集計値は、「選択された」行のすべての値の q1 [最初の四分位数] です)
  • V3 (集計値は、「選択された」行のすべての値の最小値です)
  • V4 (集計値は、「選択された」行のすべての値の最初の値です)
  • v5 (集計値は、「選択された」行のすべての値の最後の値です)

各「列」のデータを異なる方法で (つまり、異なる関数を使用して) 集計したいが、同じ行数で集計したい。

集計する行数を指定できる関数を使用して集計したいと考えています。例えば:

my_aggregate <- function(data, agg_rowcount) {
  # aggregate data over [agg_rowcount] rows....
  return (aggregated_data)
}

私は当初、適切な名前の aggregate() 関数を使用してこの関数を実装することを考えていましたが、思いどおりに機能させることができませんでした。

aggregate() を使用して発生したエラーを説明する簡単な例は次のとおりです。

> indices <- seq.Date(as.Date('2000-01-01'),as.Date('2000-01-30'),by="day")
> a <- zoo(rnorm(30), order.by=indices)
> b <- zoo(rnorm(30), order.by=indices)
> c <- zoo(rnorm(30), order.by=indices)
> d <- merge(a,b)
> e <- merge(d,c)
> head(e)
                     a          b           c
2000-01-01 -0.07924078  0.6208785 -1.79826472
2000-01-02  1.15956208  1.1867218 -0.02124817
2000-01-03  0.20427523  0.3164863 -0.20153631
2000-01-04  1.21583902 -1.3728278  1.75872854
2000-01-05 -0.32845708  0.3857658 -1.01082787
2000-01-06 -1.95312879 -0.3824591 -1.33220075
>
> aggregate(e,by=e[[1]], nfrequency=8)
Error: length(time(x)) == length(by[[1]]) is not TRUE

だから最初のハードルで失敗した。同じ数の行にわたって、異なる列を異なる方法で集計できるようにする関数を作成するのを手伝っていただければ幸いです。

注:私は、R をいじり回した最初の数日だけです。私が知っている限りでは、aggregate() はこの問題を解決する方法ではない可能性があります。上記のコードのスニペットを赤いニシン、そして集計関数を使用したときに得た問題を修正する方法についての回答を受け取ります-IF集計()は、この問題に取り組むための「最良の」(つまり、Rを推奨する)方法ではありません。

上記の試みを含めた唯一の理由は次のとおりです。

  1. 「再現可能な」エラーを投稿するように求められたため
  2. ここで質問する前に、まず自分で解決しようとしたことを示すために。
4

2 に答える 2

3

を使用して列を集計し、その週の最後の値を使用して、週ごとeに集計したいとします。wasumbmeanc

w <- as.numeric(format(time(e), "%W"))
e.w <- with(e, cbind(a = aggregate(a, w, sum), 
    b = aggregate(b, w, mean), 
    c = aggregate(c, w, tail, 1)
))
于 2012-02-05T23:16:37.347 に答える
0

ここで plyr パッケージの ddply 関数が役に立ちませんか?

複数の列で集計するには:

names(e)[1] = 'group'
agg = ddply(e, c("group"), function(df) { 
    c( sum(df$a), mean(df$b), tail(df$c) ) 
})
names(agg) = c('group', 'a', 'b', 'c')
于 2013-03-16T23:23:16.740 に答える