Interpretazione degli errori in r: 'max' non significativo per i fattori


Prima o poi, potresti riscontrare il seguente errore in R:

 'max' not meaningful for factors

Questo afferma semplicemente che stai cercando di prendere il “massimo” di una variabile che appartiene al class factor .

Ad esempio, questo errore viene generato se proviamo a prendere il massimo del seguente vettore:

 #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

Per definizione, i valori di un vettore fattoriale sono di classe nominale, il che significa che non esiste un ordine significativo dei valori. Quindi non esiste un valore “massimo” da trovare.

Una soluzione semplice per trovare il massimo di un vettore di fattori è semplicemente convertirlo in un vettore di caratteri e quindi in un vettore di numeri:

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

#[1] 15

Se il vettore dei fattori contiene semplicemente i nomi dei fattori, non è possibile trovare il valore massimo, anche dopo aver convertito il vettore dei fattori in un vettore numerico, perché non ha senso trovare il “massimo” di un elenco di fattori. nomi.

 #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

Va notato che R può trovare i vettori di numeri massimi, vettori di date e vettori di caratteri senza incontrare problemi:

 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"

Quindi, se stai cercando di trovare il valore massimo in un vettore, assicurati solo che il tuo vettore non sia di tipo factor .

Aggiungi un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *