2013-04-18 9 views
10

データフレーム内の因子の出現回数をカウントしたい。例えば、以下のコードで指定されたタイプのイベント数カウントする:ゼロのカウントが報告されている、Rの因子のカウント発生数

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 

しかし、私は3つのタイプがあることが何を知っていればイベントABCCの件数は0ですつまり、出力を次のようにしたいとします。

 type quantity 
1 A  3 
2 B  1 
3 C  0 

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

以下は、これについてどうやって行くかについての私の2つの非常に良いアイデアです。

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

アイデア#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)) 
+1

'Eを試してみてください< - サプリー(イベント、FUN = as.factor);テーブル(e) ' – isomorphismes

答えて

19

希望の三つのレベルを持つ要因として正しくevents変数を定義する場合は、無料でこれを取得:

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> 

は単に係数に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> 
+0

+1、削除してください。 – mnel

+0

+1同じ理由で... :-) –

4
> xtabs(quantity~type, events) 
type 
A B C 
3 1 0 
@ DWINの答えに非常に似
+0

Doh、さらに良い。ニース。どういうわけか私はいつも 'xtabs'を忘れています。しかし、私が示す修正因子変数も必要です。 –

+0

私はOPのデータだけを使用しました。 'xtabs'に暗黙の' sum'があります。 –

0

:あなたは平均値、最小値、最大値の操作を行うことも選択した場合dplyrライブラリ

library(dplyr) 
data <- data.frame(level = c('A', 'A', 'B', 'B', 'B', 'C'), 
        value = c(1:6)) 

data %>% 
    group_by(level) %>% 
    summarize(count = n()) %>% 
    View 

を使用して

> aggregate(quantity~type, events, FUN=sum) 
    type quantity 
1 A  3 
2 B  1 
3 C  0 
+0

しかし、私の答えと同様に修正係数変数が必要です。 –

+0

@DirkEddelbuettelまたは彼の定義、ダミーのエントリ(私が実際に使ったもの)。 –

+0

これは、より複雑な方法で同じになります。つまり、char変数は、後で集計によって係数に変換されます。 –

1

、この

data %>% 
    group_by(level) %>% 
    summarise(count = n(), Max_val = max(value), Min_val = min(value)) %>% 
    View 
関連する問題