2014-11-22 2 views
6

R (버전 3.1.2)을 사용하는 것을 배우므로 멍청한 질문 일 수 있습니다. 그러나 데이터 프레임의 하위 집합을 주문하는 데 문제가 있습니다. attach(mtcars)을 사용하여 mtcars 데이터 프레임을 사용하는 경우 ord.cars <- mtcars[order(hp),]을 사용하여 쉽게 주문할 수 있습니다. 문제는 내가 일부를 사용하는 경우의가 sub.cars <- subset(mtcars, hp > 120)을 가정 해 봅시다하고 ord.sub <- sub.cars[order(mpg),] 사용하여 주문하려고하고, 그 결과는 다음과 같다 : R 정렬 데이터 하위 집합

     mpg cyl disp hp drat wt qsec vs am gear carb 
NA     NA NA NA NA NA NA NA NA NA NA NA 
Cadillac Fleetwood 10.4 8 472.0 205 2.93 5.250 17.98 0 0 3 4 
NA.1     NA NA NA NA NA NA NA NA NA NA NA 
NA.2     NA NA NA NA NA NA NA NA NA NA NA 
NA.3     NA NA NA NA NA NA NA NA NA NA NA 
NA.4     NA NA NA NA NA NA NA NA NA NA NA 
Merc 280   19.2 6 167.6 123 3.92 3.440 18.30 1 0 4 4 
Lincoln Continental 10.4 8 460.0 215 3.00 5.424 17.82 0 0 3 4 
NA.5     NA NA NA NA NA NA NA NA NA NA NA 
Merc 450SL   17.3 8 275.8 180 3.07 3.730 17.60 0 0 3 3 
NA.6     NA NA NA NA NA NA NA NA NA NA NA 
Hornet Sportabout 18.7 8 360.0 175 3.15 3.440 17.02 0 0 3 2 
Duster 360   14.3 8 360.0 245 3.21 3.570 15.84 0 0 3 4 
Merc 280C   17.8 6 167.6 123 3.92 3.440 18.90 1 0 4 4 
NA.7     NA NA NA NA NA NA NA NA NA NA NA 
Chrysler Imperial 14.7 8 440.0 230 3.23 5.345 17.42 0 0 3 4 
Dodge Challenger 15.5 8 318.0 150 2.76 3.520 16.87 0 0 3 2 
NA.8     NA NA NA NA NA NA NA NA NA NA NA 
NA.9     NA NA NA NA NA NA NA NA NA NA NA 
Merc 450SE   16.4 8 275.8 180 3.07 4.070 17.40 0 0 3 3 
NA.10     NA NA NA NA NA NA NA NA NA NA NA 
NA.11     NA NA NA NA NA NA NA NA NA NA NA 
AMC Javelin   15.2 8 304.0 150 3.15 3.435 17.30 0 0 3 2 
Camaro Z28   13.3 8 350.0 245 3.73 3.840 15.41 0 0 3 4 
Pontiac Firebird 19.2 8 400.0 175 3.08 3.845 17.05 0 0 3 2 
Ford Pantera L  15.8 8 351.0 264 4.22 3.170 14.50 0 1 5 4 
Ferrari Dino  19.7 6 145.0 175 3.62 2.770 15.50 0 1 5 6 
Maserati Bora  15.0 8 301.0 335 3.54 3.570 14.60 0 1 5 8 
Merc 450SLC   15.2 8 275.8 180 3.07 3.780 18.00 0 0 3 3 
NA.12     NA NA NA NA NA NA NA NA NA NA NA 
NA.13     NA NA NA NA NA NA NA NA NA NA NA 
NA.14     NA NA NA NA NA NA NA NA NA NA NA 

왜 R하여 NAS로에서 제외 된 모든 행을 다시 가하고

하위 집합?

미리 감사드립니다.

+2

R에서 권장하지 않는'attach()'사용과 관련된 문제라고 생각합니다. 다음을 시도하십시오 : 데이터 세트를 분리하고'['및/또는'$'및 if 당신은 당신의 데이터를 부분 집합하기 위해'with()'를 좋아한다 :'detach (mtcars); ord.cars <- mtcars [order (mtcars $ hp),]; sub.cars <- subset (mtcars, hp> 120); ord.sub - subcars [order (sub.cars $ mpg),]'. 예상대로 작동합니까? –

+0

@beginneR 답변으로 게시하십시오. – Thomas

+0

Roger that, @Thomas :) –

답변

7

attach()의 사용과 관련된 문제는 R에서 권장하지 않습니다. 바로 이런 이유로! 문제는 코드가 모호하거나 적어도 예상했던 것과 다른 것입니다.

해결 방법?

  1. detach 데이터 세트 및
  2. 다시 attach를 사용하지 않습니다. 대신 [ 및/또는 $을 사용하고 with()을 사용하여 데이터를 부분 집합으로 지정하십시오. 여기

당신이 예를 들어 그것을 할 수있는 방법은 다음과 같습니다

detach(mtcars) 
ord.cars <- mtcars[order(mtcars$hp),] 

sub.cars <- subset(mtcars, hp > 120) 
#the subset could also be written as: 
sub.cars <- mtcars[mtcars$hp > 120,] 

ord.sub <- sub.cars[order(sub.cars$mpg),] 

head(ord.sub) # only show the first 6 rows 
        mpg cyl disp hp drat wt qsec vs am gear carb 
Cadillac Fleetwood 10.4 8 472 205 2.93 5.25 18.0 0 0 3 4 
Lincoln Continental 10.4 8 460 215 3.00 5.42 17.8 0 0 3 4 
Camaro Z28   13.3 8 350 245 3.73 3.84 15.4 0 0 3 4 
Duster 360   14.3 8 360 245 3.21 3.57 15.8 0 0 3 4 
Chrysler Imperial 14.7 8 440 230 3.23 5.34 17.4 0 0 3 4 
Maserati Bora  15.0 8 301 335 3.54 3.57 14.6 0 1 5 8 

정확하게 코드에서 문제의 원인은 무엇?

attached 이후 mtcars 데이터는 연결된 데이터의 열 이름 중 하나를 호출 할 때마다 mpg과 같이 첨부 된 데이터 세트 (원래 mtcats 데이터)를 나타냅니다. 문제는 당신이 mtcars가 부착되어있는 동안 첨부되지 않은 새로운 객체 (sub.cars)에 데이터를 서브 셋트하고 저장했다는 것입니다. 그런 다음 sub.cars 데이터를 주문하려고했을 때 sub.cars[order(mpg),]을 사용했는데 볼 수 있듯이 mpg 열을 참조했습니다.이 열은 첨부 된 (원래의) mtcars 데이터 세트의 것으로 해석됩니다. 부분 집합 데이터보다 많은 행이 있습니다. 하위 집합에서 제외 된 하위 행의 모든 ​​행은 이제 sub.cars에 NA로 표시됩니다.

학습 : attach()을 사용하지 마십시오.

+0

시간과 인내심을 가져 주셔서 감사합니다. – Tommy