2013-02-24 3 views
1

저는 영국의 프랙티스 데이터를 처방하는 데이터 프레임을 가지고 있습니다. 원래 데이터는 http://datagov.ic.nhs.uk/T201207.exe입니다. PCT와 가장 일반적인 처방 ('항목'열의 내림차순)에 따라 주문한 PCT 수준의 데이터 프레임을 작성했습니다.다른 컬럼의 인자로 컬럼에서 상위 50을 추출하십시오.

 pct sha chem.code items  nic act.cost 
32360 5ZW Q39 0212000Y0 12421 17811.40 16888.21 
28769 5ZW Q39 0209000A0 8741 7834.43 7554.72 
4439 5ZW Q39 0103050P0 7733 21566.51 20210.05 
... 
82763 5D7 Q30 0603020L0  1 1.08  1.13 
152673 5D7 Q30 1502010C0  1 0.92  0.85 
5149 5D7 Q30 0104020N0  1 0.70  0.68 
149501 5D7 Q30 1311060I0  1 0.50  0.49 

1000 개가 넘는 항목이 있습니다. 나는 각 항목에 대해 상위 50 개의 항목을 추출하려고합니다. 나는 for 루프를 작성하고 pct 레벨을 반복 할 수 있다는 것을 알고 있지만, 이는 R이 아닙니다. apply 또는 sapply을 사용하여 레벨에서 하위 집합을 수행하는 방법을 알아 냈습니다. 행의 하위 집합을 가져 오는 것보다 전체 열을 가져 오는 것이 좋습니다.

+0

링크는 데이터가 아닌 실행 파일입니다. – Arun

+2

[이것을 확인하십시오] (http://stackoverflow.com/questions/14800161/how-to-find-the-top-n-values-by-group-or-within-category-groupwise-in-an-r -dat) :) –

+0

@Arun 실행 파일은 데이터 인 2 개의 csv 파일을 포함하는 '자체 확장 Zip'입니다. NHS에 감사드립니다. – Suz

답변

1

하지 나는 그것을 얻을,하지만 내 추측이 경우 확신 :

require(plyr) 
ddply(df, .(pct), function(x) x[1:50, ]) 

이 (확실히 50 항목이 가정) 각 pct에 대한 최초의 50 개 항목을 선택할 수 있습니다.

+0

이것은 좋은 대답이며 작동합니다. 나는 그것을 투표했다. 나는 R 방식을 배우고 기본 기능을 유지하려고 노력해 왔지만, 굴복해야 할 수도 있습니다. 나는 plyr을 유용한 방식으로 사용하고 있습니다. 나는 이전 질문 ('그룹별로 상위 N 개의 값을 찾는 방법')과 동일하므로이 질문을 마무리하기 위해 투표했습니다. 그러나, plyr 방법은 그 질문에 제안되지 않습니다. 아마 거기에 그것을 추가 할 수 있습니다. (나는 투표로 기꺼이 ..) – Suz

+0

이 답변과 당신이 링크 된 사람은 동일하지 않습니다. 이것은 관계에 관계없이 처음 50 개의 요소를 선택합니다. 그들은 유사하지만 동일하지는 않습니다. 당신이 그렇게했기 때문에 질문을 끝내기 위해 투표하는 것을 꺼리지 않습니다. 그러나 다른 게시글을주의 깊게 읽고 그 내용이 필요한지 확인하십시오. 질문에 대한 답변이 명확하지 않기 때문입니다. – Arun

+0

이 경우 넥타이는 신경 쓰지 않습니다. 3 개 필드에 데이터를 주문했습니다. 하나는 데이터를 그룹화하는 요인으로, 두 번째는 관심이있는 순위로, 세 번째는 가장자리를 정의 (나누기)합니다. 그래서 잘 해결되었습니다. 다른 질문에는이 사건이 부분 집합으로 포함되어 있으며 @ Ista의 첫 번째 제안이 내 질문에 대답했습니다. 해당 페이지에 대한 답변 * 또한 * 세부 사항에서 관계의 문제를 해결하지만 부차적 인 문제로 다루고 있습니다. 나는이 질문을 열어두기에 충분할만큼 질문이 뚜렷하지 않지만, 아마도 당신의 요지는'ddply()'가 그 관계를 다루지 않을 것이라는 점이다. – Suz

관련 문제