次のようなデータセットがあるとします。
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_'に適用可能なメソッドはありません」
ご協力いただきありがとうございます!
代わりに以下を試してください。
_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であり、この一連の合計が発生回数であるからです。
summarise
がn()
または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
_