web-dev-qa-db-ja.com

変数の1つの特定の値のdplyrカウント数

次のようなデータセットがあるとします。

id <- c(1, 1, 2, 2, 3, 3)
code <- c("a", "b", "a", "a", "b", "b")
dat <- data.frame(id, code)

つまり、

    id  code
1   1   a
2   1   b 
3   2   a
4   2   a
5   3   b
6   3   b

Dplyrを使用して、各IDに存在するaの数をどのようにカウントしますか

つまり、

   id  countA
1   1   1
2   2   2
3   3   0

私は機能していないこのようなものを試しています、

countA<- dat %>%
group_by(id) %>%
summarise(cip.completed= count(code == "a"))

上記は私にエラーを与えます、「エラー:クラス "logical"のオブジェクトに適用される 'group_by_'に適用可能なメソッドはありません」

ご協力いただきありがとうございます!

13
Jacob Curtis

代わりに以下を試してください。

_library(dplyr)
dat %>% group_by(id) %>%
  summarise(cip.completed= sum(code == "a"))

Source: local data frame [3 x 2]
    id cip.completed
  (dbl)         (int)
1     1             1
2     2             2
3     3             0
_

これが機能するのは、論理条件_code == a_が一連のゼロと1であり、この一連の合計が発生回数であるからです。

summarisen()またはsum()自体を呼び出すラッパーであるため、いずれにしてもsummarise内で_dplyr::count_を必ずしも使用する必要はないことに注意してください。 _?dplyr::count_を参照してください。 countを本当に使用したい場合は、まず_code==a_が含まれるすべての行のみを保持するようにデータセットをフィルタリングし、countを使用するとすべてが厳密に正の(つまりゼロ以外の)カウントになるようにすることができます。例えば、

_dat %>% filter(code==a) %>% count(id)

Source: local data frame [2 x 2]

     id     n
  (dbl) (int)
1     1     1
2     2     2
_
18
coffeinjunky