2016-09-27 2 views
0

데이터 프레임이 있고, 각 변수의 길이가 다릅니다 (더 짧은 변수에는 NA 값이 있음).R에있는 데이터 프레임의 루프에 대해

V1 V2 V3 V4 V5 V6 V7 V8 V9 
1 581 466 528 424 491 500 652 219 520 
2 655 320 532 350 508 498 660 85 473 
3 479 349 510 150 490 499 611 598 459 
4 855 585 471 92 508 499 557 668 493 
5 318 538 506 113 492 499 347 291 483 
6 581 329 502 265 509 502 301 293 511 
7 741 359 536 399 498 500 565 690 506 
8 257 475 521 296 498 502 316 53 536 
9 759 434 538 447 490 500 614 449 524 
10 525 527 506 174 499 500 649 395 456 
11 621 670 489 756 497 498 401 443 465 
12 789 307 504 808 501 498 499 63 533 
13 368 392 515 940 496 501 638 909 514 
14 242 549 480 380 503 501 489 347 465 
15 432 405 451 914 493 501 319 324 541 
16 608 609 514 441 497 499 572 932 473 
17 301 691 548 783 497 502 458 301 482 
18 792 638 493 964 505 498 378 692 500 
19 727 377 536 974 491 499 301 957 524 
20 597 463 518 418 491 499 626 245 504 
21 700 407 549 375 501 501 351 706 495 
22 705 661 493 798 492 501 660 694 494 
23 454 426 523 28 504 498 362 797 471 
24 432 627 452 550 491 500 474 50 500 
25 124 338 501 779 499 502 684 316 514 
26 826 683 477 751 492 502 632 308 524 
27 218 631 500 296 502 498 693 169 515 
28 460 652 502 306 505 498 666 988 459 
29 683 621 521 956 498 501 404 218 497 
30 316 372 516 524 500 499 405 54 461 
31 503 370 520 429 500 502 510 579 493 
32 357 369 521 480 495 501 410 667 470 
33 451 617 524 191 493 498 535 668 450 
34 335 498 522 713 493 498 566 67 520 
35 473 421 479 834 497 499 696 670 541 
36 447 360 451 708 492 501 528 744 538 
37 137 490 490 740 508 500 630 590 469 
38 228 455 488 91 500 501 426 477 472 
39 873 555 456 520 510 500 662 154 536 
40 564 364 532 236 504 498 338 497 516 
41 216 480 460 498 503 502 605 566 520 
42 389 572 532 943 501 499 572 150 539 
43 490 531 536 941 501 502 653 557 508 
44 772 421 536 693 507 498 447 861 451 
45 390 403 454 985 509 498 695 859 516 
46 264 369 550 962 494 498 684 317 504 
47 269 667 508 199 490 501 690 757 481 
48 877 616 484 516 495 501 300 636 472 
49 755 534 511 882 510 499 547 530 479 
50 447 455 490 91 504 501 572 NA 539 
51 137 555 488 520 503 500 653 NA NA 
52 228 364 456 236 501 498 447 NA NA 
53 873 480 532 498 501 502 NA NA NA 
54 564 NA 460 943 507 499 NA NA NA 
55 216 NA 532 941 509 NA NA NA NA 
56 389 NA 490 693 NA NA NA NA NA 
57 490 NA 488 985 NA NA NA NA NA 
58 772 NA 456 NA NA NA NA NA NA 
59 390 NA 532 NA NA NA NA NA NA 
60 264 NA 460 NA NA NA NA NA NA 
61 269 NA 532 NA NA NA NA NA NA 
62 877 NA NA NA NA NA NA NA NA 
63 755 NA NA NA NA NA NA NA NA 

각 변수에 대해 작업을 실행 중입니다. 우선, I는 각 변수 오름차순 단일 벡터에 dataframe 컷 :

a1=dat0[order(dat0$V1),"V1"] 
a2=dat0[order(dat0$V2),"V2"] 
a3=dat0[order(dat0$V3),"V3"] 
a4=dat0[order(dat0$V4),"V4"] 
a5=dat0[order(dat0$V5),"V5"] 
a6=dat0[order(dat0$V6),"V6"] 
a7=dat0[order(dat0$V7),"V7"] 
a8=dat0[order(dat0$V8),"V8"] 
a9=dat0[order(dat0$V9),"V9"] 

다음에, I는 NA를 제거한다.

lqavg.1 lqavg.2 lqavg.3 lqavg.4 lqavg.5 lqavg.6 lqavg.7 lqavg.8 lqavg.9 
1 224.6667 351.5385 463.1333 175.5714 491.3846  498 347.9231 127.25 462.3333 
:

a1=a1[!is.na(a1)] 
a2=a2[!is.na(a2)] 
a3=a3[!is.na(a3)] 
a4=a4[!is.na(a4)] 
a5=a5[!is.na(a5)] 
a6=a6[!is.na(a6)] 
a7=a7[!is.na(a7)] 
a8=a8[!is.na(a8)] 
a9=a9[!is.na(a9)] 

마지막 I는 I가 취득 (첫 번째 변수 코드 이하)

le.1=seq(1:length(a1)) 
fr.1=le.1/length(a1) 
df.1=data.frame(a1,le.1,fr.1) 
lq.1=df.1[fr.1<=0.25,] 
lqavg.1=mean(lq.1$a1) 

최종 결과를 각 변수의 25 % 낮은 값의 평균을 계산

목표는 for 루프를 작성하거나 각 변수의 코드를 작성하지 않고이를 수행하는 함수를 찾는 것입니다.

친절 바커에 의해 제안 된 기능으로

, 내가 얻을 :

> apply(dat0, 2, function(x) mean(x[x <= quantile(x, 0.25, na.rm = TRUE)], na.rm = TRUE)) 
     V1  V2  V3  V4  V5  V6  V7  V8  V9 
230.3750 353.3571 467.2778 184.2667 491.5000 498.0000 347.9231 139.8462 463.0769 

> apply(dat0, 2, function(x) mean(x[x < quantile(x, 0.25, na.rm = TRUE)], na.rm = TRUE)) 
     V1  V2  V3  V4  V5  V6  V7  V8  V9 
230.3750 351.5385 463.1333 175.5714 491.5000 498.0000 347.9231 127.2500 463.0769 

어떤 도움에 감사드립니다!

감사합니다.

+0

환영합니다! 문제를 실행하고 문제의 코드 아래에 문맥에 사용하는 코드를 게시 할 때 문제가 무엇인지 표시하십시오. 모두가 필요한 것을 빨리 얻을 수 있습니다. 고마워! – AER

+4

각 변수의 길이가 다르다고 말하면 이것이 데이터 프레임이면 불가능합니다. 그 안에 NA가 있다는 뜻입니까? –

+0

불분명 함. closevote를 캐스팅하므로 한 시간 내에 명확히 할 수있는 요청에 대한 응답이 없습니다. –

답변

0

이것은 우습다. 여기 sapply를 사용하도록 코드를 변환하는 방법은 다음과 같습니다

sapply(dat0, function(x) { 
    x = x[order(x)]   
    x = x[!is.na(x)] 
    x = x[(1:length(x))/length(x) <= 0.25] 
    return(mean(x)) 
}) 
# V1  V2  V3  V4  V5  V6  V7  V8  V9 
# 224.6667 351.5385 463.1333 175.5714 491.3846 498.0000 347.9231 127.2500 462.3333 

이 (평균을 찾아, 누락 된 값을 제거 길이에 따라 값을 나머지의 25 %을, 순서) 코드와 같은 동일한 단계를 따릅니다. 그것은 당신의 것과 일치합니다. sapply은 데이터 프레임의 모든 열에서 함수를 호출합니다. 여기서 우리는 익명의 함수를 호출하고있는 열에 우리가 원하는 것을 수행하는 함수를 만듭니다.

+0

와우 그레고, 고마워. 이것은 내가 찾고 있던 대답이다. 게시물의 제목을 변경해야하는지 궁금합니다. (더 이상 for 루프가 아니기 때문에!) – Jerry

+0

글쎄, 당신의 질문에 대한 루프에 대한. 대답은 for 루프가 아닙니다. – Gregor

+0

또한 Barker의 의견에 대한 제안에 따라'? quantile' 함수는 많은 옵션을 가지고 있으며 생각보다 복잡합니다. 'type = 6' 인수를 주면 (또는 quantile을 사용하기 위해 솔루션을 단순화 할 수 있다면) 자신의 솔루션이 원하는대로 할 수있는 좋은 기회입니다. – Gregor

관련 문제