0

したがって、基本的に私はこの形式のデータを持っています:

ID  Value
1   32
5   231
2   122
1   11
3   ...
2   ...
5   ...
6   ...
2   ...
1   33
.   ...
.   ...
.   ...

ID '1' の値を合計したいのですが、5 つのグループです。つまり、最初の 5 エントリには、ID '1' のエントリが 2 つあるため、合計 43 を取得し、次の 5 でエントリ、ID '1' を持つエントリは 1 つだけなので、33 を取得します。など...最後に、すべての合計を含む配列を取得します。つまり、(43,33,......)

forループとtapplyでそれを行うことができますが、Rにはforループを必要としないより良い方法があるに違いないと思います

どんな助けでも大歓迎です!どうもありがとうございました!

4

3 に答える 3

0

グループを線引きする列を追加すると、ddply()魔法のように動作します。

ID <- c(1, 5, 2, 1, 3, 2, 5, 6, 2, 1)
Value <- c(32, 231, 122, 11, 45, 34, 74, 12, 32, 33)
Group <- rep(seq(100), each=5)[1:length(ID)]

test.data <- data.frame(ID, Value, Group)

library(plyr)
output <- ddply(test.data, .(Group, ID), function(chunk) sum(chunk$Value))


> head(test.data)
   ID Value Group
1   1    32     1
2   5   231     1
3   2   122     1
4   1    11     1
5   3    45     1
6   2    34     2

> head(output)
  Group ID  V1
1     1  1  47
2     1  2 125
3     1  3  49
4     1  5 237
5     2  1  36
6     2  2  74
于 2013-05-02T02:15:18.077 に答える