2013-01-11 11 views
5

Spędziłem większą część wczorajszego popołudnia i dziś rano próbując uzyskać wgląd w mój problem. Jeśli możesz wskazać mi jakieś zasoby, które byłyby świetne!Brakujące wiersze z zestawu danych w R

Mam ramkę danych w R (importowane z tabeli Oracle), patrz dane poniżej. Nazywam to 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 

Muszę jednak sprawić, aby wyglądała następująco. Muszę się upewnić, że istnieje wiersz dla każdej możliwej kombinacji Loss_Yr i Dev_Lag. Zobacz dodanych wierszy

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 

Na początku myślałem, że chciałbym stworzyć tabelę „manekina” ze wszystkich możliwych kombinacjach, a następnie wykonaj korespondencji seryjnej z mojego istniejącego; prowadzenie zapisów z mojego głównego stołu, Loss_Data.

Jednak staram się zbudować proces i ta metoda nie byłaby zbyt elastyczna.

Jakieś pomysły na rozwiązanie tego problemu ?!

+1

Co z metodą, którą zarysujesz, nie będzie wystarczająco elastyczne? – joran

+0

Innym sposobem, w jaki robiłem to w przeszłości, jest w istocie zestawienie danych w tabeli, wypełnienie brakujących wartości, a następnie un-tabulowanie ("tapply" lub "table", po których następuje 'as.data.frame. table', lub coś 'plyr'-ish) –

+0

Powodem, dla którego nie chcę używać metody z dwiema tabelami, jest to, że musiałbym nadal tworzyć nową tabelę z możliwymi kombinacjami. Aby opracować, nie tylko upłynie czas, który będzie wymagał aktualizacji tabeli kombinacji, ale może będę musiał działać przez różne przyrosty czasu. Na przykład: rok, kwartał, miesiąc itd. –

Odpowiedz

7

Podejście, które opisujesz, jest właściwym pomysłem. Może zbytnio komplikujesz implementację?

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

i jako wykończenie, d [is.na (d)] <- 0, aby zastąpić te NA z zerami;) –

Powiązane problemy