2014-11-17 4 views
0

Я не понимаю, почему функция «which» не дает здесь правильного результата. Я просто хочу выбрать аэропорты в Пенсильвании с более чем 5000 коммерческих услуг, и результат всегда содержит ряд коммерческих операций обслуживания ниже 5000, как видно ниже. Я прочитал несколько вопросов, указывающих на проблемы с «which», но я не видел ничего подобного, и у меня не было этой проблемы, прежде чем использовать эту функцию. Спасибо за помощь!R: «Какая» функция дает неожиданные (и нежелательные) результаты при сравнении (> =)

Test4<-Airports[which(Airports$LAN_FA_TY=="AIRPORT" & 
         Airports$STATE_NAME=="PENNSYLVANIA" & 
         Airports$COMM_SERV>= "5000") 
       , ] 
Test4$COMM_SERV 
# [1] 77680 73 71 
+0

в дальнейшем, используйте кнопку '{}' вложить код в блоках кода, а не кнопка '" ' – jlhoward

+0

Можете ли вы обеспечить выпуск' ул (Airports) '(включить его в вашем вопросе) –

+0

Или просто напечатайте 'sapply (Аэропорты, класс)' – jlhoward

ответ

3

В этом фрагменте кода Airports$COMM_SERV>= "5000" вы используете «» вокруг числовое значение (5000), который превращает число в символ и, следовательно, вы больше не можете использовать математические операции, такие как >= с этим персонажем . Просто удалите «», и он должен работать так, как ожидалось. (Использование операторов сравнения для объектов символа разрешено и имеет смысл. См. ?'>='. Просто результаты могут быть не такими, как ожидалось.)

При взгляде на код вы также можете воспользоваться with(), чтобы уменьшить типизацию и улучшение читаемости:.

with(Airports, Airports[which(LAN_FA_TY == "AIRPORT" & STATE_NAME == "PENNSYLVANIA" & COMM_SERV >= 5000),]) 
+0

Хороший ответ, который заставляет меня думать, что вы должны изменить свое имя на «endR» - за исключением того, что г-н Виггинс мог бы c ome после вас :-) –

+0

Очень интересно, @jlhoward - спасибо за понимание здесь. Возможно, нам понадобится выход 'str (Airports)'. –

+0

@CarlWitthoft, спасибо (хотя кажется, что ответ может быть неправильным). К сожалению, я не совсем понимаю, кто такой мистер Виггинс. –