Выберите набор данных на основе другого значения столбца, но в той же строке - PullRequest
1 голос
/ 16 апреля 2019

У меня есть набор данных с примерно 80 столбцами и 1000 строк, пример этого набора данных приведен ниже:

ID gend.y gend.x Sire   Dam    Weight 
1   M      F     Jim    jud    220 
2   F      F     josh   linda  198
3   M      NA    Claude Bere   200
4   F      M     John   Mary   350
5   F      F     Peter  Lucy   298

И мне нужно выбрать всю информацию, которая отличается между gend.y и gend.x,как это:

ID gend.y gend.x Sire   Dam    Weight 
1   M      F     Jim    jud    220 
3   M      NA    Claude Bere   200
4   F      M     John   Mary   350

Помните, мне нужно выбрать еще 76 столбцов.

Я попробовал эту команду:

library(dplyr)
new.file=my.file %>%
  filter(gend.y != gend.x)

Но не сработало.И это сообщение появляется:

Error in Ops.factor(gend.y, gend.x) : level sets of factors are different

1 Ответ

0 голосов
/ 16 апреля 2019

Как сказал @divibisan: «Все еще не воспроизводимый пример, но ошибка приближает вас. Эти две переменные являются факторами. Интерпретация фактора зависит как от кодов, так и от атрибута« уровни ». Будьте внимательны только при сравнении». факторы с одинаковым набором уровней (в том же порядке). Возможно, вы захотите преобразовать их в символ перед сравнением или исправить уровни для соответствия. "

Итак, я сделал это (преобразовал их в символы):

my.file$new.gend.y=as.character(my.file$gend.y)
my.file$new.gend.x=as.character(my.file$gend.x)

И после того, как я выполнил мою предыдущую команду с новыми переменными (теперь преобразованными в символ):

library(dplyr)
new.file=my.file %>%
  filter(new.gend.y != new.gend.x | is.na(new.gend.y != new.gend.x))

А теперь сработало, как я и ожидал. Кредиты @ divibisan

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...