2017-02-20 5 views
0

내 데이터 집합은 아래와 같습니다. 나는 아래의 명령을 사용하여 전체 데이터 집합 사이의 MPR에서, 1st_metric 2nd_metric, 3rd_metric 및 최소 값의 최대 값을 갖는 행을 필터링하기 위해 노력하고R에 최대 및 최소 값이 너무 많은 행 필터링

k[(which.max(k$1st_metric))&(which.max(k$2nd_metric))&(which.max(k$3rd_metric))&(which.min(k$mpr)),] 

대신 3을 반환하고

a_metric b_metric c_metric tl_metric  mpr 
1 1.0079123 0.4121975 1.0510727 0.5280035 -0.03690215 
2 -0.3479917 -0.3185338 -0.3652249 -0.1644014 0.01175352 
3 1.7148652 2.7669706 1.8156309 0.6885553 -0.05121204 
    rate  1st_metric 2nd_metric 3rd_metric 4th_metric IDX 
1 -0.7771414 0.2600359 0.3368508 0.3989317 0.4422435 1 
2 0.1782411 -0.2824974 -0.3050651 -0.3225591 -0.3318396 2 
3 -0.2663647 2.7014838 2.7858352 2.8452738 2.8524606 3 

row는 전체 데이터 집합을 반환합니다. 여기서 내가 뭘 잘못하고 있니?

답변

1

는 콘솔에 3 & 3 & 3 & 3를 입력하면 코드가 실제로

k[3 & 3 & 3 & 3] 

로 평가되고 무엇 그것은 당신에게 #[1] TRUE을 제공합니다.

따라서 전체 데이터 프레임을 선택하는 k[TRUE]을 반환합니다.

는 당신이 필요로하는 것은 k[3, ]

우리가 사용할 수있는 평가 어떤 조건,

k[which(k$X1st_metric == max(k$X1st_metric) & k$X2nd_metric == max(k$X2nd_metric) 
     & k$X3rd_metric == max(k$X3rd_metric) & k$mpr == min(k$mpr)), ] 

# a_metric b_metric c_metric tl_metric  mpr  rate 
#3 1.714865 2.766971 1.815631 0.6885553 -0.05121204 -0.2663647 

# X1st_metric X2nd_metric X3rd_metric X4th_metric IDX 
#3 2.701484 2.785835 2.845274 2.852461 3 

또는 코드를 수정하여

k[unique(c(which.max(k$X1st_metric), which.max(k$X2nd_metric) , 
      which.max(k$X3rd_metric) , which.min(k$mpr))), ]