Я хочу, чтобы выполнить data.table задачу снова и снова в вызове функции: Reduce number of levels for large categorical variables Моя проблема похожа на Data.table and get() command (R) или pass column name in data.table using variable in R, но я не могу заставить его работатьг data.table использование в вызове функции
Без вызова функции это работает просто отлично:
# Load data.table
require(data.table)
# Some data
set.seed(1)
dt <- data.table(type = factor(sample(c("A", "B", "C"), 10e3, replace = T)),
weight = rnorm(n = 10e3, mean = 70, sd = 20))
# Decide the minimum frequency a level needs...
min.freq <- 3350
# Levels that don't meet minumum frequency (using data.table)
fail.min.f <- dt[, .N, type][N < min.freq, type]
# Call all these level "Other"
levels(dt$type)[fail.min.f] <- "Other"
но завернутые как
reduceCategorical <- function(variableName, min.freq){
fail.min.f <- dt[, .N, variableName][N < min.freq, variableName]
levels(dt[, variableName][fail.min.f]) <- "Other"
}
я только получаю ошибки как:
reduceCategorical(dt$x, 3350)
Fehler in levels(df[, variableName][fail.min.f]) <- "Other" :
trying to set attribute of NULL value
А иногда
Error is: number of levels differs
Всегда лучше использовать синтаксис 'data.table' при работе с' data.table' .... –
Что вы имеете в виду? 'df [, variableName] [fail.min.f]' правильный data.table, не так ли? –
Нет, это не правильный способ работы с факторами. Вы можете сделать это в два этапа, но я не тестировал эффективность: 'dt [type% in% fail.min.f, type: =" Other "]; dt [, type: = factor (type)] 'Я попытаюсь придумать лучший способ, но –