R Impute DataTable Mode И Мыши - PullRequest
       72

R Impute DataTable Mode И Мыши

0 голосов
/ 18 марта 2020
# IMPUTING VALUES
library(data.table)
set.seed(1337)
mydt = q <- data.table(Year = rep(2000:2005, each = 10),
                   Type = c("A","B"),
Class = sample(1:5,rep=T),
                   Car = sample(0:1, rep=T),
                   Boat = sample(1:4, rep=T)
)
naRows <- sample(nrow(mydt),15)
mydt[ naRows, Car := NA]
naRows <- sample(nrow(mydt),15)
mydt[ naRows, Boat := NA]
setkey(mydt,Year,Type)

Все мои данные относятся к категории и двоичным файлам.

Я хочу sh сделать два элемента.

Сначала я надеюсь вменять режим машины и лодки по типу и Учебный класс. Так что для каждой комбинации Типа и Класса найдите Режим Автомобиля и Лодки и вменяйте их.

Во-вторых, я задаюсь вопросом: можно ли использовать «мыши», чтобы сделать это тоже?

Я ищу решение для data.table и мыши. Я получу sh для обоих, потому что в моих больших данных «мыши» могут занять очень много времени!

1 Ответ

1 голос
/ 18 марта 2020

Если я правильно понял ваш запрос (вы хотите заменить пропуски режимом столбца на тип x Class), это может быть решением data.table:

# function to calculate mode
stats_mode <- function(x) {
  ux <- unique(x[!is.na(x)])
  ux[which.max(tabulate(match(x, ux)))]
}

# Generate new column with mode per group
mydt[, `:=`(mCar  = stats_mode(Car),
            mBoat = stats_mode(Boat)), by = .(Type, Class)]

# Replace missings
mydt[is.na(Car),  Car  := mCar]
mydt[is.na(Boat), Boat := mBoat]

# Cleansing
mydt[, c("mBoat", "mCar") := NULL]

С большими данными вы Вероятно, хотят избежать материализации двух столбцов, влекущих за собой режим. Вместо этого вы можете сохранить сводную таблицу и использовать ее в качестве таблицы поиска, чтобы найти значение режима для каждой группы.

...