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()
.