2013-01-11 38 views
5

Tôi đã dành phần tốt hơn của buổi chiều ngày hôm qua và sáng nay cố gắng để đạt được một số hiểu biết sâu sắc về vấn đề của tôi. Nếu bạn có thể chỉ cho tôi bất kỳ tài nguyên nào tuyệt vời!Thiếu hàng từ tập dữ liệu trong R

Tôi có một khung dữ liệu trong R (được nhập từ bảng Oracle), xem dữ liệu bên dưới. Tôi gọi nó là Loss_Data.

Loss_Yr Dev_Lag Claim_Amnt 
1 2007 1 300 
2 2007 2 10 
3 2007 3 250 
4 2007 5 5 
5 2008 1 450 
6 2008 2 80 
7 2008 4 3 
8 2009 1 175 
9 2009 3 20 
10 2010 1 95 
11 2010 2 40 
12 2011 1 130 

Tuy nhiên, tôi cần làm cho nó trông giống như sau. Tôi cần đảm bảo rằng có một hàng cho mọi kết hợp Loss_Yr và Dev_Lag có thể có. Xem các hàng được thêm

Loss_Yr Dev_Lag Claim_Amnt 
1 2007 1 300 
2 2007 2 10 
3 2007 3 250 
***4 2007 4 0*** 
5 2007 5 5 
6 2008 1 450 
7 2008 2 80 
***8 2008 3 0*** 
9 2008 4 3 
10 2009 1 175 
***11 2009 2 0*** 
12 2009 3 20 
13 2010 1 95 
14 2010 2 40 
15 2011 1 130 

Lúc đầu tôi đã nghĩ rằng tôi sẽ tạo một bảng "giả" với tất cả các kết hợp có thể và sau đó hợp nhất với hiện tại của tôi; giữ các bản ghi từ bảng trong của tôi, Loss_Data.

Tuy nhiên, tôi đang cố gắng xây dựng quy trình và phương pháp này sẽ không thể thực hiện được.

Bất kỳ ý tưởng nào về cách giải quyết vấn đề này ?!

+1

Phương pháp bạn phác thảo sẽ không đủ linh hoạt? – joran

+0

Cách khác mà tôi đã thực hiện điều này trong quá khứ về cơ bản là kết hợp dữ liệu, điền vào các giá trị bị thiếu nếu thích hợp và sau đó bỏ đánh dấu nó ('tapply' hoặc' table' theo sau là 'as.data.frame. table', hoặc cái gì đó 'plyr'-ish) –

+0

Lý do tôi không muốn sử dụng phương thức với hai bảng là vì tôi sẽ phải tiếp tục tạo một bảng mới với các kết hợp có thể. Để xây dựng, không chỉ thời gian trôi qua mà sẽ yêu cầu cập nhật cho bảng combo, nhưng tôi có thể cần phải chạy theo các khoảng thời gian khác nhau. Ví dụ: theo năm, theo quý, theo tháng, v.v. –

Trả lời

7

Cách tiếp cận bạn mô tả là ý tưởng đúng. Có lẽ bạn đang quá phức tạp thực hiện?

d <- read.table(text="Loss_Yr Dev_Lag Claim_Amnt 
1 2007 1 300 
2 2007 2 10 
3 2007 3 250 
4 2007 5 5 
5 2008 1 450 
6 2008 2 80 
7 2008 4 3 
8 2009 1 175 
9 2009 3 20 
10 2010 1 95 
11 2010 2 40 
12 2011 1 130", header=TRUE, row.names=1) 

filled <- merge(d, 
       with(d, expand.grid(Loss_Yr=unique(Loss_Yr), Dev_Lag=unique(Dev_Lag))), 
       all=TRUE) 
+1

và khi kết thúc, d [is.na (d)] <- 0 để thay thế các NA đó bằng số không;) –

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