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.

Encuentra la unión de una columna entre filas coincidentes de marcos de datos de una lista en R.

Tengo una lista de marcos de datos. Me gustaría tomar la unión de los valores de columna en todos los marcos de datos cuando los nombres de columna entre los marcos de datos coincidan.

Aquí hay un conjunto de datos de prueba.

df1 <- data.frame(group = c(“G1”, “G1”, “G1”, “G1”, “G1”, “G2”, “G2”, “G2”, “G1”, “G1”),
Name = c(“B”, “B”,”B”, “A”, “A”,’D’,”D” , “E”, “C”, “C”), value = c(2,4,5,2,4,7, 1, 2,4,1))
df2 <- data.frame(group = c(“G1”, “G1”, “G1”, “G1”, “G2”, “G2”, “G2”, “G2” , “G1”, “G1”),
Name = c(“B”, “B” , “A”, “A”, “D”, “E”, “E”, “E”, “C”, “C”), value = c(2, 3, 5, 1, 7, 2, 4, 8, 9,1))
df <- rbind(df1, df2)

df.list <- split(df, f=df$group)

La salida deseada es la siguiente:

B = 2,3,4,5
A = 1,2,4,5
D = 1,7
E = 2,4,8
C = 1,4,9

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Para obtener el resultado deseado, podemos usar el paquete dplyr para agrupar los data frames por la columna Name y utilizar la función union para combinar los valores de las columnas.

    Aquí está el código para lograr esto:

    library(dplyr)
    
    # combinar todos los data frames en la lista
    df.all <- bind_rows(df.list)
    
    # agrupar por Name y combinar valores usando union
    df.union <- df.all %>% 
      group_by(Name) %>% 
      summarise(value = union(value))
    
    # ver el resultado
    df.union
    

    Esto dará el resultado deseado, donde cada Name tendrá su correspondiente value en un formato combinado y ordenado.

Comments are closed.