2012-04-05 49 views
17

Có cách tính số lần đối tượng xuất hiện trong một cột tích lũy trong R không?Số tích lũy trong R

ví dụ: Nói rằng tôi có cột:

id 
1 
2 
3 
2 
2 
1 
2 
3 

này sẽ trở thành:

id count 
1  1 
2  1 
3  1 
2  2 
2  3 
1  2 
2  4 
3  2 

vv ...

Cảm ơn

Trả lời

21

Chức năng ave tính toán chức năng theo nhóm.

> id <- c(1,2,3,2,2,1,2,3) 
> data.frame(id,count=ave(id==id, id, FUN=cumsum)) 
    id count 
1 1  1 
2 2  1 
3 3  1 
4 2  2 
5 2  3 
6 1  2 
7 2  4 
8 3  2 

tôi sử dụng id==id để tạo ra một vector của tất cả TRUE giá trị, mà được chuyển đổi để số khi truyền cho cumsum. Bạn có thể thay thế id==id bằng rep(1,length(id)).

7

Dưới đây là một cách để có được số lượng:

id <- c(1,2,3,2,2,1,2,3) 

sapply(1:length(id),function(i)sum(id[i]==id[1:i])) 

Cung cấp cho bạn:

[1] 1 1 1 2 3 2 4 2 
+1

@ user1165199: nếu điều này trả lời tốt nhất câu hỏi của bạn, vui lòng nhấp vào dấu kiểm. –

+0

Đây là ace. Ràng buộc nó vào một đối tượng data.table cũng đơn giản. – DaveRGP

2

Biểu dữ liệu tôi đã quá lớn và câu trả lời được chấp nhận vẫn bị treo. Điều này làm việc cho tôi:

library(plyr) 
df$ones <- 1 
df <- ddply(df, .(id), transform, cumulative_count = cumsum(ones)) 
df$ones <- NULL 
Các vấn đề liên quan