2013-08-06 6 views
2

data.frame에 두 세트의 열이 있습니다 : 위치의 시간 및 해당 위치의 속성.R 열 인덱스에서 값 선택

> FRAME <- data.frame(cbind(rnorm(5, 0,1), rnorm(5, 0,1), rchisq(5, 1,4), rchisq(5,1,4))) 
> names(FRAME) <- c("Var1", "Var2", "Time1", "Time2") 
> FRAME$LONGEST <- apply(FRAME[,3:4], 1, function(x) which.max(x)) 
> FRAME 
     Var1  Var2 Time1  Time2 
1 0.2919722 -0.1069673 4.666482 1.556280 
2 -0.6518142 1.1226106 4.867360 9.251785 
3 -1.8612779 0.2874144 7.578548 1.820536 
4 -0.7059450 -0.1036744 1.428684 16.937638 
5 2.1793696 0.8993723 1.639895 7.942257 

나는 Var*는 그것과 관련된 긴 Time*을 가지고 중 새로운 변수로 선택하고 싶습니다. 올바른 열을 검색하기 위해 나에게

> FRAME 
     Var1  Var2 Time1  Time2 LONGEST 
1 0.2919722 -0.1069673 4.666482 1.556280  1 
2 -0.6518142 1.1226106 4.867360 9.251785  2 
3 -1.8612779 0.2874144 7.578548 1.820536  1 
4 -0.7059450 -0.1036744 1.428684 16.937638  2 
5 2.1793696 0.8993723 1.639895 7.942257  2 

가장 간단한 방법은 내가 무엇을 놓치고 완전히 쓸모없는 결과

FRAME[,FRAME$LONGEST] 
     Var1  Var2  Var1.1  Var2.1  Var2.2 
1 0.2919722 -0.1069673 0.2919722 -0.1069673 -0.1069673 
2 -0.6518142 1.1226106 -0.6518142 1.1226106 1.1226106 
3 -1.8612779 0.2874144 -1.8612779 0.2874144 0.2874144 
4 -0.7059450 -0.1036744 -0.7059450 -0.1036744 -0.1036744 
5 2.1793696 0.8993723 2.1793696 0.8993723 0.8993723 

은, 열이 충분히 쉽게하는 부여합니다 확인? 해당 참조보다 다른 행렬에서 선택하려면 which.max() 변경할 수있는 방법이 있습니까?

답변

2

무엇 막 :

apply(FRAME,1,function(x) x[1:2][which.max(x[3:4])]) 
+1

브릴리언트. 나는'which.max'와'apply'의 모든 조합을 시도했다고 생각했습니다. '[] '는 중첩 될뿐만 아니라 스택 될 수 있다는 사실을 잊었을 때. – gregmacfarlane