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.

Reorganizando datos de un tibble a un dataframe en R.

Tengo una tibble en R organizada de esta manera (solo las primeras 20 filas de miles):

Tibble: 20 × 4

TF confidence target mor
1 Ahr B Cyp1a1 1
2 Ahr B Cyp1a2 1
3 Ahr B Cyp1b1 1
4 Ahr B Fos 1
5 Ahr B Myc 1
6 Ahr B Ugt1a7c 1
7 Ahr B Ugt1a6a 1
8 Ahr B Ugt1a6b 1
9 Ahr B Asap1 1
10 Ahr B Erg 1
11 Ahr B Vgll4 1
12 Ar A Abce1 1
13 Ar A Acad12 1
14 Ar A Acad10 1
15 Ar A Ahsg 1
16 Ar A Akr1b3 1
17 Ar A Akt1 1
18 Ar A Anapc10 1
19 Ar A Ap2m1 1
20 Ar A Appbp2 1

y deseo organizarla de esta manera:

TF Descripción Targets
Ahr Ninguna Cyp1a1 Cyp1a2 Cyp1b1 Fos Myc Ugt1a7c Ugt1a6a Ugt1a6b Asap1 Erg Vgll4
Ar Ninguna Abce1 Acad12 Acad10 Ahsg Akr1b3 Akr1b3 Akt1 Anapc10 Ap2m1 Appbp2

…La tabla continúa con miles de líneas. Puede haber un número variable de objetivos para un valor TF dado. ¿Cómo puedo crear esta segunda tabla como un dataframe en R dada la primera tabla?

¡Gracias!

Tags:  ,

Answer

  1. Avatar for davy.ai

    Para crear la segunda tabla, puedes utilizar la función pivot_wider() del paquete tidyr con algunos pasos adicionales para agrupar los objetivos por el TF y llenar cualquier valor faltante con NA. Aquí hay un ejemplo de código:

    library(tidyr)
    
    # pivotea la tibble al formato ancho
    wide_tbl <- pivot_wider(data = tibble,
                            names_from = target,
                            values_from = mor,
                            values_fill = NA)
    
    # agrupa los objetivos por TF y crea una nueva columna para la descripción
    new_tbl <- wide_tbl %>%
      group_by(TF) %>%
      summarise(Description = "None",
                Targets = paste(na.omit(colnames(wide_tbl)[-1]), collapse = "|"))
    
    # elimina los nombres de columna y convierte a un dataframe
    colnames(new_tbl)[-1] <- ""
    new_df <- data.frame(new_tbl)
    

    Esto debería darte un dataframe en el formato de la segunda tabla que proporcionaste, con los valores de TF en la primer columna, “None” en la segunda columna, y los objetivos separados por “|” en la tercer columna.

Comments are closed.