2013-02-14 2 views
-1

해당 timeseries 내에서 NA 값을 대체 할 추정치를 계산하려는 여러 timeseries로 구성된 데이터 세트가 있습니다. 나는 여기에 대체 할 값 예측

x <- read.table(text=" 
LOC  YEAR JAN FEB MAR APR MAY JUN JUL AUG SEP OCT NOV DEC 
A  1980 0 0 0 8 104 NA 534 399 202 20 0 0 
A  1981 0 0 0 45 121 387 454 309 135 29 0 0 
A  1982 0 0 6 25 123 346 459 423 223 11 0 0 
A  1983 0 0 0 20 88 294 474 424 296 38 3 0 
A  1984 0 0 0 28 192 340 385 339 122 3 0 0 
A  1985 0 0 12 40 142 327 407 445 198 13 0 0 
A  1986 0 0 0 59 147 290 381 362 176 10 0 0 
A  1987 0 0 0 12 83 288 408 395 112 12 0 0 
A  1988 0 0 0 8 116 309 393 392 152 11 2 0 
A  1989 0 0 7 69 238 366 442 402 158 23 0 0 
A  1990 0 1 0 38 186 527 397 298 225 11 0 0 
A  1991 0 0 5 15 201 378 374 364 137 25 0 0 
A  1992 0 0 0 31 96 284 457 381 212 28 0 0 
A  1993 0 0 0 40 149 400 510 425 174 24 0 0 
A  1994 0 0 12 37 172 502 524 474 209 49 5 0 
A  1995 0 0 14 21 157 340 447 457 220 8 0 0 
A  1996 0 3 0 36 361 457 482 378 160 46 0 0 
A  1997 0 0 3 19 141 357 481 429 272 51 0 0 
A  1998 0 0 9 6 197 438 553 396 323 60 0 0 
A  1999 0 0 0 22 147 323 456 465 215 18 0 0 
A  2000 0 0 0 53 305 387 503 436 278 53 0 0 
A  2001 0 0 0 27 212 416 553 432 246 23 2 0 
A  2002 0 0 3 63 192 483 469 499 224 37 1 0 
A  2003 0 0 0 32 NA 357 494 480 NA 54 22 0 
A  2004 0 0 19 18 222 358 398 318 146 15 0 0 
A  2005 0 0 0 4 157 376 472 376 287 46 1 0 
A  2006 0 0 5 64 269 435 496 NA 107 29 1 0 
A  2007 0 0 3 6 87 336 396 444 264 83 0 0 
A  2008 0 0 2 11 181 487 417 399 130 26 0 0 
A  2009 0 2 0 32 189 394 509 441 174 50 0 0 
A  2010 0 0 4 32 154 490 401 465 299 21 0 0 
B  1980 0 0 0 6 108 530 581 411 199 10 0 0 
B  1981 0 0 0 55 101 412 451 330 149 25 0 0 
B  1982 0 0 6 26 116 346 502 483 244 10 0 0 
B  1983 0 0 0 11 93 295 514 488 320 40 0 0 
B  1984 0 0 0 31 200 334 402 347 NA 8 0 0 
B  1985 0 0 9 40 151 318 431 456 209 16 0 0 
B  1986 0 0 3 59 150 298 409 410 179 8 0 0 
B  1987 0 0 NA 13 87 315 456 403 137 12 0 0 
B  1988 0 0 0 12 NA 327 303 NA NA NA NA NA 
B  1989 NA 0 NA 62 248 366 445 443 187 22 0 0 
B  1990 0 0 1 31 171 568 439 321 248 16 0 0 
B  1991 0 0 3 27 227 368 361 361 143 15 0 0 
B  1992 0 0 0 34 75 268 432 395 224 9 0 0 
B  1993 0 NA 0 28 144 411 519 421 169 16 0 0 
B  1994 0 0 4 25 139 484 520 485 210 NA NA NA 
B  1995 NA NA 7 NA 146 NA NA 491 219 NA 0 NA 
B  1996 NA NA 0 NA NA 440 507 NA NA 50 NA NA 
B  1997 NA NA NA 2 NA 266 483 412 252 43 0 0 
B  1998 0 0 5 9 208 430 558 417 354 66 0 0 
B  1999 NA 0 0 24 111 303 NA 432 206 29 0 0 
B  2000 0 0 0 72 338 417 553 468 300 47 0 0 
B  2001 NA 0 1 38 215 459 626 481 250 37 6 0 
B  2002 0 0 13 84 208 433 528 525 NA NA 3 0 
B  2003 0 0 2 48 220 385 580 483 257 61 12 NA 
B  2004 0 0 16 22 231 372 413 352 199 11 0 NA 
B  2005 NA 0 0 13 167 NA 529 400 288 49 0 0 
B  2006 0 0 6 89 279 459 535 403 100 31 0 0 
B  2007 0 0 4 27 68 338 406 452 293 87 0 0 
B  2008 0 0 0 31 188 503 439 399 107 28 0 0 
B  2009 0 0 NA 21 162 394 468 387 138 33 0 0 
B  2010 0 0 0 17 134 439 NA 429 210 13 0 0 
C  1987 NA NA NA NA NA NA NA NA NA NA 0 0 
C  1988 0 0 3 19 228 382 435 422 213 17 16 0 
C  1989 0 1 17 100 332 432 543 459 208 66 0 0 
C  1990 0 0 2 54 243 615 414 318 255 27 2 0 
C  1991 0 0 2 41 304 539 505 513 NA 100 0 0 
C  1992 0 0 0 83 157 368 531 452 300 67 0 0 
C  1993 0 0 2 79 211 448 572 498 215 75 0 0 
C  1994 1 0 21 46 194 580 618 541 257 66 7 0 
C  1995 0 0 36 54 224 437 551 532 273 31 2 0 
C  1996 0 7 1 70 436 511 550 432 216 62 1 0 
C  1997 0 0 11 27 177 412 556 501 336 74 0 0 
C  1998 0 0 21 25 308 572 638 475 407 87 0 0 
C  1999 0 1 3 58 218 417 536 542 288 55 0 0 
C  2000 0 0 0 110 396 446 610 540 380 80 0 0 
C  2001 0 0 3 67 290 533 648 533 335 72 12 0 
C  2002 0 0 9 161 296 563 534 597 297 62 3 0 
C  2003 0 0 3 91 249 435 571 566 NA 100 29 0 
C  2004 0 0 26 49 308 416 467 391 212 24 0 0 
C  2005 0 0 0 22 197 468 557 NA 355 70 1 0 
C  2006 0 0 13 117 NA 488 557 NA 141 36 6 0 
C  2007 0 0 6 22 113 376 445 463 292 98 0 0 
C  2008 0 0 NA 41 240 554 443 430 NA 57 2 0 
C  2009 0 NA 13 62 252 480 530 478 216 61 0 0 
C  2010 0 0 1 32 212 525 399 489 309 34 0 0 
D  2007 NA NA NA NA NA NA 285 NA 213 34 0 NA 
D  2008 0 0 0 11 121 NA 301 275 85 29 0 0 
D  2009 0 NA 1 23 103 346 NA 389 106 29 0 0 
D  2010 0 0 4 6 96 435 323 367 255 14 0 0 
E  1980 0 0 2 36 188 583 654 503 279 52 0 0 
E  1981 0 0 4 58 NA 455 NA NA 226 NA 1 1 
E  1982 0 3 25 NA NA 445 553 552 357 49 0 NA 
E  1983 0 0 0 58 202 397 549 534 384 90 7 0 
E  1984 0 0 3 65 278 407 453 447 226 29 3 0 
E  1985 0 0 21 82 237 384 492 534 278 NA NA 0 
E  1986 0 6 7 109 219 354 466 458 258 NA NA 0 
E  1987 0 0 0 42 142 344 475 475 195 56 4 NA 
E  1988 0 0 1 23 209 NA NA 458 247 39 13 0 
E  1989 0 3 34 131 314 459 539 478 241 79 0 0 
E  1990 0 1 6 74 268 618 444 359 294 43 10 0 
E  1991 0 0 15 57 285 439 434 445 193 81 0 0 
E  1992 0 0 1 70 143 424 547 473 297 55 0 0 
E  1993 0 0 0 67 187 413 582 440 271 103 0 0 
E  1994 0 0 10 66 239 585 592 556 284 67 9 0 
E  1995 0 0 17 56 205 413 546 531 293 51 0 0 
E  1996 0 9 0 73 412 550 580 476 250 88 3 0 
E  1997 0 0 14 37 198 433 574 502 369 90 0 0 
E  1998 0 0 21 11 332 542 664 473 423 91 0 0 
E  1999 0 0 2 94 231 435 562 571 313 63 0 0 
E  2000 0 0 9 139 419 437 601 534 361 76 0 0 
E  2001 0 0 2 64 285 493 629 521 308 40 10 0 
E  2002 0 0 13 131 277 528 524 549 281 72 3 0 
E  2003 0 0 3 90 250 420 523 520 NA 86 21 0 
E  2004 0 0 35 35 NA 404 470 384 215 34 0 0 
E  2005 0 0 0 26 198 452 544 441 391 87 3 0 
E  2006 0 0 8 123 NA 489 573 NA 194 74 5 0 
E  2007 0 0 12 18 121 389 450 524 346 134 0 0 
E  2008 0 0 8 49 239 596 501 488 213 48 0 0 
E  2009 0 NA 4 38 260 487 534 499 223 77 0 0 
E  2010 0 0 7 36 212 564 454 533 367 38 0 0 

", header = T) 

여기가는 하나의 dataframe에서 처음 5 개 역입니다 .... ddply() 및 LM()하지만이 일에 문제의 비트를 데 익숙 .. .

내가 적은 7 년 이상 데이터를 어떤 위치를 제거해야

은 전체 데이터 세트는 부부에게 백 개 위치 ... 다음

공동 어떤 NA를 교체있다 어떤 도움을 크게입니다 ... 내가 개별 방송국의 월별 평균을 계산하고

내가 여기에 붙어 NA의 해당 스테이션과 관련된 달을 배치하려고

월 입지 평균

xFix <- melt(x, id.vars = c("LOC", "YEAR"), measure.vars = c("JAN", "FEB", "MAR", "APR", "MAY", "JUN", "JUL", "AUG", "SEP", "OCT", "NOV", "DEC"), variable.name = "Month", value.name = "CLDD") 

을 rrect 감사합니다 ...

고마워요. 제시

SE

FROM

답변

0

여기 제안입니다.

먼저 각 LOC에 대한 행 수를 계산하고 7 개 이상의 행이 있는지 확인하십시오. x를 부분 집합하는 데 사용됩니다.

cnt <- table(x$LOC) >= 7 

그런 다음 cnt는 행 수가 충분하지 않은 LOC를 제거하는 데 사용됩니다. 이것은 새로운 데이터 프레임 tmp를 생성합니다.

tmp <- x[x$LOC %in% names(cnt)[cnt], ] 

다음 명령은 상당히 복잡합니다. by는 LOC 값을 따라 데이터 프레임의 각 하위 집합에 함수를 적용하는 데 사용됩니다. 월 열만 관심 대상이므로 month.abb를 사용하여이 열만 선택됩니다. lapply 명령은 데이터 프레임의 하위 집합의 각 열에 다음 함수를 적용하는 데 사용됩니다. 모든 NAs를 열의 평균으로 바꿉니다.

데이터 프레임을 얻으려면 as.data.frame 및 do.call (rbind, ...) 함수가 필요합니다.

res <- do.call(rbind, by(tmp[, toupper(month.abb)], 
        tmp$LOC[drop = TRUE], 
        FUN = function(y) 
         as.data.frame(lapply(y, function(z) 
             replace(z, is.na(z), mean(z, na.rm = TRUE)))))) 

마지막 단계에서 첫 번째 두 열이 결과와 결합됩니다.

cbind(tmp[c("LOC", "YEAR")], res) 

완료.