2016-03-30 38 views
8

Nói rằng tôi có một tập dữ liệu như thế này:dplyr số đếm của một giá trị cụ thể của biến

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

Ie,

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

Sử dụng dplyr, làm thế nào tôi sẽ nhận được một số lượng bao nhiêu một là có là dành cho mỗi id

tức,

id countA 
1 1 1 
2 2 2 
3 3 0 

Tôi đang cố gắng những thứ như thế này mà không hoạt động,

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

Trên đây mang lại cho tôi một lỗi, "Lỗi: không có phương pháp áp dụng cho 'group_by_' áp dụng cho một đối tượng của lớp 'logic'"

Cảm ơn sự giúp đỡ của bạn!

Trả lời

10

Hãy thử như sau thay vì:

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 

này hoạt động vì điều kiện logic code == a chỉ là một loạt các số không và những người thân, và tổng của loạt bài này là số lần xuất hiện.

Lưu ý rằng bạn sẽ không nhất thiết phải sử dụng dplyr::count bên summarise dù sao, vì nó là một wrapper cho summarise gọi hoặc n() hoặc sum() riêng của mình. Xem ?dplyr::count. Nếu bạn thực sự muốn sử dụng count, tôi đoán bạn có thể làm điều đó bằng cách trước tiên lọc tập dữ liệu để chỉ giữ lại tất cả các hàng trong đó code==a và sử dụng count sau đó sẽ cung cấp cho bạn tất cả các số dương (tức là khác không). Ví dụ:

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

Source: local data frame [2 x 2] 

    id  n 
    (dbl) (int) 
1  1  1 
2  2  2 
+0

Điều tổng hợp hoạt động. Cảm ơn bạn! –

Các vấn đề liên quan