R сортировка подмножества данных
Я учусь использовать R (версия 3.1.2), поэтому это может быть вопросом noob, но у меня возникли проблемы с упорядочением подмножества фрейма данных. Если я использую фрейм данных mtcars, используя attach(mtcars), Я могу легко заказать его через ord.cars <- mtcars[order(hp),]. Проблема в том, что если я использую подмножество, скажем sub.cars <- subset(mtcars, hp > 120) и попробуйте заказать его с помощью ord.sub <- sub.cars[order(mpg),] результат следующий:
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 все строки, которые были исключены из подмножества?
спасибо заранее!
1 ответов
это проблема, связанная с использованием attach() что не рекомендуется в R-именно по этой причине! Проблема в том, что ваш код неоднозначен или, по крайней мере, отличается от того, что вы ожидали.
как решить эту проблему?
-
detachнабор данных и - не используйте
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). Проблема заключалась в том, что вы вложили данные и сохранили их в новом объекте (sub.автомобили), который не был прикреплен, пока mtcars все еще был прикреплен. Потом, когда ты пытался заказать подлодку.данные автомобилей, вы использовали sub.cars[order(mpg),] и, как вы можете видеть, там вы ссылаетесь на mpg столбец-который интерпретируется R как один из прикрепленного (исходного) набора данных mtcars, с большим количеством строк, чем вы подсеттировали данные. Все эти строки в твоей подлодке.автомобили, которые были исключены из подмножества, теперь будут отображаться как NAs в sub.cars.
урок: не используйте attach().