Функция вменения пропущенных значений с использованием среднего в R - PullRequest
0 голосов
/ 29 ноября 2018

Мой тиббл:

Данные в Excel:

Data in Excel

impute <- read_excel(choose.files())

imp <- function(df) {
      for(i in 1:ncol(df)){
        df[is.na(df[,i]),i] <- mean(df[,i],na.rm = T)
      }
}


imp(impute)

Предупреждающие сообщения:
1: В mean.default(df[, i], na.rm = T):Аргумент
не является числовым или логическим: возвращает NA
2: In mean.default(df[, i], na.rm = T):
Аргумент не является числовым или логическим: возвращает NA

Приведенный выше код работает хорошо, вменяетсяявляется Data.Frame, но не работает, если это Tibble.Может кто-нибудь, пожалуйста, дайте мне знать, как изменить код, если я буду работать с Tibble.

1 Ответ

0 голосов
/ 29 ноября 2018

Одно из различий между data.frame и тибблом заключается в том, что фреймы данных сбрасывают измерения, когда это возможно по умолчанию, а тиблы - нет.

То есть, если x является фреймом данных, то x[, i] может быть или не быть фреймом данных, в зависимости от i.Если i это одно значение, то x[, i] будет просто вектором.Если i - это вектор с несколькими значениями, тогда x[, i] будет фреймом данных.Это может привести к ошибкам, когда i - это переменная, которая может иметь или не иметь несколько значений, поскольку класс может отличаться (с исправлением использования x[, i, drop = FALSE] для гарантии возврата data.frame).

Tibbles стремятся решить эту проблему, переключив значение по умолчанию drop = TRUE на drop = FALSE, поэтому x[, i] является тибблом, независимо от того, имеет ли i длину 1 или больше.

При вычислении среднего значения вы хотите, чтобы df[,i] рассматривался как числовой вектор, а не как столбец с 1 столбцом, поэтому вам нужно указать его:

df[[i]] # This is the preferred way to extract a single column
df[, i, drop = TRUE] # this will work too (since tibble version 1.4.1)

Это объясняетсяболее подробно в разделе «Tibbles vs data.frames» виньетка Tibbles .

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