Интерпретация ошибок в R: «max» не имеет значения для факторов


В тот или иной момент вы можете столкнуться со следующей ошибкой в R:

'max' not meaningful for factors

Это просто указывает на то, что вы пытаетесь получить «максимум» переменной класса factor .

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

#create a vector of class *vector*factor_vector <- as.factor(c(1, 7, 12, 14, 15))

#attempt to find max value in the vector
max(factor_vector)

#Error in Summary.factor(1:5, na.rm = FALSE) : 
# 'max' not meaningful for factors

По определению значения в фактор-векторе относятся к номинальному классу, что означает отсутствие осмысленного порядка значений. Таким образом, максимальное значение не может быть найдено.

Одно простое решение для нахождения максимума факторного вектора состоит в том, чтобы просто преобразовать его в вектор символов, а затем в числовой вектор:

#convert factor vector to numeric vector and find the max value
new_vector <- as.numeric(as.character(factor_vector))
max(new_vector)

#[1] 15

Если ваш факторный вектор просто содержит имена факторов, то невозможно найти максимальное значение даже после преобразования факторного вектора в числовой вектор, так как это не позволяет найти «максимум» списка имена.

#create factor vector with names of factors
factor_vector <- as.factor(c("first", "second", "third"))

#attempt to convert factor vector into numeric vector and find max value
new_vector <- as.numeric(as.character(factor_vector))
max(new_vector)

#Warning message:
#NAs introduced by coercion 
#[1] NA

Стоит отметить, что R может найти максимальное количество числовых векторов, векторов дат и векторов символов, не сталкиваясь с какими-либо проблемами:

numeric_vector <- c(1, 2, 12, 14)
max(numeric_vector)

#[1] 14

character_vector <- c("a", "b", "f")
max(character_vector)

#[1] "f"

date_vector <- as.Date(c("2019-01-01", "2019-03-05", "2019-03-04"))
max(date_vector)

#[1] "2019-03-05"

Таким образом, если вы пытаетесь найти максимальное значение в векторе, просто убедитесь, что ваш вектор не имеет типа factor .

Замечательно! Вы успешно подписались.
Добро пожаловать обратно! Вы успешно вошли
Вы успешно подписались на кодкамп.
Срок действия вашей ссылки истек.
Ура! Проверьте свою электронную почту на наличие волшебной ссылки для входа.
Успех! Ваша платежная информация обновлена.
Ваша платежная информация не была обновлена.