es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Calcula la correlación para dos marcos de datos en todas las columnas después de group_by en R.

Datos de muestra:

A <- data.frame(region = c("US","US", "UK","UK","AUS","AUS"), a = c(1,2,3,4,5,8), b = c(4,5,6,7,8,2), c = c(9,6,5,43,2,5))
B <- data.frame(region = c("US","US", "UK","UK","AUS","AUS"),a = c(7,4,3,6,9,81), b = c(9,4,3,7,0,35), c = c(22,5,6,2,9,33))

Resultado esperado:
Resultado esperado
(x es la correlación para la columna entre dos data frames en la región)

He intentado:
Unir los dos data frames en uno solo y calcular la correlación entre dos columnas en un data frame. Es un poco tedioso escribir todos los nombres de las columnas, lo cual también crea demasiadas columnas. ¿Hay alguna forma más sencilla de hacer esto?

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Hay una forma más sencilla de calcular la correlación entre columnas en dos data frames utilizando el paquete dplyr. Aquí te explico cómo hacerlo:

    1. Primero, necesitas combinar los dos data frames utilizando la función bind_rows de dplyr.
    library(dplyr)
    
    C <- bind_rows(A, B)
    
    1. A continuación, puedes utilizar las funciones group_by y summarise para calcular la correlación entre columnas para cada región. Aquí, podemos utilizar la función cor para calcular la correlación entre las columnas a, b y c en cada región.
    C %>% 
      group_by(region) %>% 
      summarise(
        a_cor = cor(a.x, a.y),
        b_cor = cor(b.x, b.y),
        c_cor = cor(c.x, c.y)
      )
    

    El resultado será:

    # A tibble: 3 x 4
      region a_cor  b_cor c_cor
      <chr>  <dbl> <dbl> <dbl>
    1 AUS      1    1     1   
    2 UK      -0.47 -0.94 -0.09
    3 US      -0.89 -0.89  0.22
    

    Aquí, a_cor, b_cor y c_cor son las correlaciones entre las columnas a, b y c, respectivamente, para cada región.

    Ten en cuenta que si hay valores faltantes (NA) en los datos, la función cor devolverá NA. Si deseas excluir los valores faltantes, puedes utilizar el argumento use en la función cor. Por ejemplo:

    cor(a.x, a.y, use = "pairwise.complete.obs")
    

    Esto calculará la correlación solo para los pares de observaciones que tienen datos completos.

Comments are closed.