paquete multiple left_join guide functions examples descargar columns cheatsheet anti_join r

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