Подмножество по почтовому индексу (уровни факторов) - PullRequest
4 голосов
/ 07 декабря 2011

У меня есть проблема, из-за которой я хочу сопоставить начальный почтовый индекс и конечный почтовый индекс очень большого набора данных опроса и поместить эти результаты в новый кадр данных. Я создал примерный фрейм данных для использования в целях иллюстрации.

ID = c(1,2,3,4,5) 
StartPC = c("AF2 4RE","AF3 5RE","AF1 3DR","AF2 4RE","AF2 4PE")
EndPC = c("AF2 4RE","NA","AF2 3DR","AX2 4RE","AF2 4PE")
data<-data.frame(ID,StartPC,EndPC)

data2 <- subset(data, StartPC==EndPC,na.rm=TRUE)

Используя приведенный выше код, я хочу создать фрейм данных (data2), который включает только идентификационные номера, при этом начальный и конечный почтовые индексы совпадают. Однако я получаю сообщение об ошибке:

Ошибка в Ops.factor (StartPC, EndPC): наборы уровней факторов различны

Для вывода нужно просто включить идентификационные номера 1 и 5 в новую таблицу данных.

1 Ответ

8 голосов
/ 07 декабря 2011

Это будет потому, что

 Error in Ops.factor(StartPC, EndPC) : level sets of factors are different

Ваши два столбца - это факторы, а не символы. Факторы - это категориальные переменные, которые хранятся в виде целых чисел и справочной таблицы «уровней». Сравнение их фактически сравнивает базовые целые числа, поэтому R гарантирует, что вы сравниваете факторы с одинаковыми уровнями. Если нет, то он решает, что вы делаете плохо.

Итак, преобразовать в символ:

> subset(data, as.character(StartPC)==as.character(EndPC),na.rm=TRUE)
  ID StartPC   EndPC
1  1 AF2 4RE AF2 4RE
5  5 AF2 4PE AF2 4PE

Либо так на лету, либо создайте свой фрейм данных с символами в первую очередь, либо убедитесь, что оба столбца сделаны с одинаковыми уровнями.

...