Удаление строк в R исказило набор данных

Я удалил определенные строки из своей базы данных, используя следующий код:

df2 <- df1[!(df1$variable==1), ]

Это была фиктивная переменная, и строки со значением 1 для этой конкретной фиктивной переменной были успешно удалены. (Я проверил размеры моей базы данных с помощью функции "dim" до и после; и все выглядело нормально.)

Однако после того, как я запустил свою регрессионную модель на этот раз с новым набором данных "df2", я увидел, что степени свободы резко упали! Это было намного больше количества удаленных строк!

Я задавался вопросом, как это могло случиться. Затем я понял, что в новом наборе данных было много строк, в которых были только NA. В каждой строке, в которой случайная переменная имела пропущенное значение, R составляла полный ряд значений NA.

Поняв, что приведенный выше код был не лучшим способом удаления строк, я попробовал следующее:

df2 <- df1[(df1$variable==0 | is.na(df1$variable)), ]

Кажется, сработало, так как у меня больше нет той же проблемы. Но могли бы вы сказать, что у этого нового кода выше могут быть некоторые (похожие или другие) проблемы, о которых я сейчас не знаю?

1 ответ

Решение

Новый код должен быть в порядке. Проблема со старым кодом была вызвана комбинацией NAв df1$variable и == оператор сравнения.

Если вы читаете справку по операторам сравнения, ?"=="вы увидите, что "отсутствующие значения (NA) и значения NaN считаются несопоставимыми даже для самих себя, поэтому сравнения с ними всегда приводят к NA".

В вашем случае, когда переменная df1$ была NAрезультаты вашей попытки подмножества были NA (не TRUE или же FALSE), в результате чего другие переменные в строке были NA, Например:

df1 <- expand.grid(variable=c(0, 1, NA), var2=c(0, 1, NA))

sel1 <- !(df1$variable==1)
sel1
df1[sel1, ]

sel2 <- df1$variable==0 | is.na(df1$variable)
sel2
df1[sel2, ]
Другие вопросы по тегам