2015-01-24 6 views
0

조인 기준이 열 이름 (값이 아님)에있는 2 데이터 프레임을 조인 할 때 다소 독특한 문제가 있습니다. 나 데이터의 예에 의해 설명하자 여기 나의 예측 데이터 프레임의 헤드 (멀티 클래스 예측)입니다 :R 데이터 프레임 열 이름으로 조인

> head(mnm.predict.test.probs) 
       1   2   3 
9 1.013755e-04 3.713862e-02 0.96276001 
10 1.904435e-11 3.153587e-02 0.96846413 
12 6.445101e-23 1.119782e-11 1.00000000 
13 1.238355e-04 2.882145e-02 0.97105472 
22 9.027254e-01 7.259787e-07 0.09727389 
26 1.365667e-01 4.034372e-01 0.45999610 

여기에 응답 dataframe의 머리 :

> head(testing.logist$cut.rank) 
[1] 3 3 3 3 1 3 

조인 이 두 세트 사이의 값은 첫 번째 데이터 프레임의 확률을 두 번째 데이터 프레임의 해당 값으로 찾습니다. 예를 들어 : 효율적으로 그렇게하는 방법

0.96276001 
0.96846413 
1.00000000 
0.97105472 
9.027254e-01 
0.45999610 

어떤 생각 : 반환 dataframe/목록과 같이해야합니까?

+3

위의 설명에서'mnm.predict.test.probs [cbind (1 : nrow (mnm.predict.test.probs), testing.logist $ cut.rank] ' – nicola

+0

'''을 놓쳤습니다. 너무 늦었습니다.) mnm.predict.test.probs [cbind (1 : nrow (mnm.predict.test.probs), testing.logist $ cut. rank)]' – nicola

답변

1

하위 집합 연산자는 행렬 인수로 행렬을 받아들입니다. 각 행은 가져올 요소의 행 및 열 인덱스를 나타냅니다. 이 시도 :

mnm.predict.test.probs[cbind(1:nrow(mnm.predict.test.probs),testing.logist$cut.‌​‌​rank)] 
#[1] 0.9627600 0.9684641 1.0000000 0.9710547 0.9027254 0.4599961 

를 내부 연산자이기 때문에,이 방법은 임의의 for 루프보다 더 빠른 또는 *apply 기반 솔루션이다.