multiple - dplyr r guide
Dplyr join warning: factores de uniĆ³n con diferentes niveles (3)
En el caso de la base de datos, no olvide las stringsAsFactors=FALSE
en muchos casos, para evitar esta advertencia. (Fue mi caso).
sqlExecute(my_database_channel, data=myparam, stringsAsFactors=FALSE )
Cuando dplyr
la función de unión en el paquete dplyr
, recibo esta advertencia:
Warning message:
In left_join_impl(x, y, by$x, by$y) :
joining factors with different levels, coercing to character vector
No hay mucha información en línea sobre esto. ¿Alguna idea de que podría ser? ¡Gracias!
Eso no es un error, eso es una advertencia. Y le está diciendo que una de las columnas que usó en su unión fue un factor y ese factor tenía diferentes niveles en los diferentes conjuntos de datos. Para no perder ninguna información, los factores se convirtieron a valores de caracteres. Por ejemplo:
library(dplyr)
x<-data.frame(a=letters[1:7])
y<-data.frame(a=letters[4:10])
class(x$a)
# [1] "factor"
# NOTE these are different
levels(x$a)
# [1] "a" "b" "c" "d" "e" "f" "g"
levels(y$a)
# [1] "d" "e" "f" "g" "h" "i" "j"
m <- left_join(x,y)
# Joining by: "a"
# Warning message:
# joining factors with different levels, coercing to character vector
class(m$a)
# [1] "character"
Puede asegurarse de que ambos factores tengan los mismos niveles antes de fusionar
combined <- sort(union(levels(x$a), levels(y$a)))
n <- left_join(mutate(x, a=factor(a, levels=combined)),
mutate(y, a=factor(a, levels=combined)))
# Joining by: "a"
class(n$a)
#[1] "factor"
Este mensaje de advertencia también aparecerá si las columnas de unión en las dos tablas tienen diferentes órdenes de nivel;
tb1 <- data_frame(a = c("a","b","c")) %>% mutate(a=as.factor(a))
# Change level order of table tb2''s col a
tb2 <- tb1 %>% mutate(a = fct_relevel(a,"c"))
# Check both still factors
tb1$a %>% class()
[1] "factor"
tb2$a %>% class()
[1] "factor"
# Check level order
tb1$a %>% levels()
[1] "a" "b" "c"
tb2$a %>% levels()
[1] "c" "a" "b"
# Try joining
tb1 %>% left_join(tb2)
Joining, by = "a"
Column `a` joining factors with different levels, coercing to character vector