12

データ フレーム内の因子の出現回数をカウントしたい。たとえば、次のコードで特定のタイプのイベントの数をカウントするには:

library(plyr)
events <- data.frame(type = c('A', 'A', 'B'),
                       quantity = c(1, 2, 1))
ddply(events, .(type), summarise, quantity = sum(quantity))

出力は次のとおりです。

     type quantity
1    A        3
2    B        1

しかし、 、 、A、の 3 種類のイベントがあることがわかっていて、 のカウントも確認したい場合はどうすればよいでしょうか。つまり、出力を次のようにします。BCC0

     type quantity
1    A        3
2    B        1
3    C        0

どうすればいいですか?これを行うための関数がどこかに定義されている必要があるように感じます。

以下は、これをどのように行うかについての私の 2 つのあまり良くない考えです。

アイデア #1:ループを使用してこれを行うことができることは知っていますが、 でループforを使用している場合、何か間違ったことをしていると広く言われていることは知っています。それを行うためのより良い方法があるに違いありません。forR

アイデア #2:元のデータ フレームにダミー エントリを追加します。このソリューションは機能しますが、よりエレガントなソリューションが必要なようです。

events <- data.frame(type = c('A', 'A', 'B'),
                       quantity = c(1, 2, 1))
events <- rbind(events, data.frame(type = 'C', quantity = 0))
ddply(events, .(type), summarise, quantity = sum(quantity))
4

6 に答える 6

22

events変数を目的の 3 つのレベルを持つ因子として正しく定義すると、これを無料で取得できます。

R> events <- data.frame(type = factor(c('A', 'A', 'B'), c('A','B','C')), 
+                       quantity = c(1, 2, 1))
R> events
  type quantity
1    A        1
2    A        2
3    B        1
R> table(events$type)

A B C 
2 1 0 
R> 

factorを呼び出すだけtable()で、すでに正しいことがddply()行われていますdrop

R> ddply(events, .(type), summarise, quantity = sum(quantity), .drop=FALSE)
  type quantity
1    A        3
2    B        1
3    C        0
R> 
于 2013-04-18T03:29:56.623 に答える
4
> xtabs(quantity~type, events)
type
A B C 
3 1 0 
于 2013-04-18T03:41:19.193 に答える