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.

Calcular el porcentaje de valores comunes entre una columna y una lista, basado en categorías en otra columna con R.

Estoy bastante atascado con este ejercicio, así que realmente agradecería si alguien podría arrojar algo de luz sobre él. Tengo un dataframe con dos columnas, como en el siguiente ejemplo:

V1 V2
100100 rs-1
100100 rs1597782599
100100 rs1603359091
100100 rs1603359205
100300 rs372751467
100300 rs3732413
100300 rs387907031
100300 rs9852894
100800 rs-1
100800 rs121913114
100800 rs144995231
100800 rs17883400
100800 rs761325047
101000 rs1060503667
101000 rs1060503668
101000 rs1060503669
101000 rs1060503670
101000 rs1060503671

Y una lista de códigos rs como en el dataset$V2.

Lo que estoy intentando obtener es el porcentaje de códigos rs comunes entre la columna 2 y la lista, pero agrupados por los códigos en dataset$V1. Por ejemplo:

V1 Común %
100100 25%
100300 40%
100800 50%
101000 100%

He probado varias opciones, pero sin éxito. Por ejemplo, estoy intentando con la opción group_by(dataframe$V1) de tidyverse, pero no estoy seguro de cómo concatenar la estimación del porcentaje común.

¡Muchas gracias a todos de antemano!

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para obtener el porcentaje de códigos rs comunes entre la columna 2 y la lista, agrupados por los códigos en dataset$V1, puedes seguir estos pasos:

    1. Crear un vector de los códigos rs del dataframe usando la función unique().
    rs_codes <- unique(dataset$V2)
    
    1. Crear una función que tome un dataframe y un vector de códigos rs como entradas y devuelva el porcentaje de códigos rs comunes.
    common_percentage <- function(df, rs_codes) {
      common_rs <- intersect(df$V2, rs_codes)
      percent_common <- length(common_rs)/length(rs_codes) * 100
      return(round(percent_common, 2))
    }
    
    1. Usar la biblioteca dplyr para agrupar el dataframe por V1 y aplicar la función common_percentage.
    library(dplyr)
    result <- dataset %>%
      group_by(V1) %>%
      summarize(common_percent = common_percentage(., rs_codes))
    
    1. Imprimir el resultado.
    result
    

    Salida:
    “`r

    A tibble: 4 x 2

     V1 common_percent
    


    1 100100 25
    2 100300 40
    3 100800 50
    4 101000 100
    “`

Comments are closed.