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


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

 'max' not meaningful for factors

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

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

 #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 .

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *