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.

¿Cómo puedo encontrar el porcentaje de los diferentes grupos dentro de una columna?

Tengo un dataframe (sy2.1) con dos columnas (Vannstand2Positive y Vannstand2Negative) que ambas contienen NA como resultado de mutar las columnas desde una columna existente. También tengo una tercera columna (t) con fecha y hora, y una cuarta columna (Kategori) con 4 categorías. Quiero encontrar el porcentaje de cada una de las 4 categorías con valores de Vannstand2Positive y Vannstand2Negative.

Este es el código que he utilizado, en el cual solo uso la columna con valores positivos (Vannstand2Positive) en este código.

sy2.1 %>%
  filter(year(t)==2005) %>%
  group_by(Kategori, year(t)) %>%
  dplyr::summarise(sum_vannstandPos = sum(Vannstand2Positive)) %>%
  dplyr::mutate(percent_vannstandPos=sum_vannstandPos/sum(sum_vannstandPos)*100)

Kategori year(t) sum_VannstandPos percent_VannstandPos

1: Liten 2005 NA NA

2: Moderat 2005 1107 100

1: Stor 2005 609 100

2: Størst 2005 1107 100

Claramente hay algo incorrecto en el código, ya que el porcentaje muestra 100% en todas las categorías, pero necesito que se realicen los cálculos correctos del porcentaje.
Intenté usarlo también en la columna con valores negativos (Vannstand2Negative), pero solo obtuve NA en la tabla. Pero sé que es completamente posible encontrar porcentajes de valores negativos. ¿Alguien tiene un código que pueda solucionar esto?

Al agregar na.rm=T a la función sum, obtuve porcentajes en casi todos los grupos excepto en el primer grupo:

Kategori year(t) sum_VannstandPos percent_VannstandPos

1: Liten 2005 NA NA

2: Moderat 2005 1107 32.34005

1: Stor 2005 609 17.79141

2: Størst 2005 1107 49.86854
Tags:  ,

Answer

  1. Avatar for davy.ai

    Para solucionar el problema con el primer grupo (Liten) que da valores NA, puedes agregar una sentencia ifelse para verificar si la suma de los valores en ese grupo es NA o no. Si es NA, entonces establece el valor porcentaje como NA, de lo contrario, calcúlalo como de costumbre.

    Aquí tienes un código modificado que debería funcionar tanto para valores positivos como negativos:

    {r}
    sy2.1 %>%
    filter(year(t) == 2005) %>%
    group_by(Kategori, year(t)) %>%
    summarise(sum_pos = sum(Vannstand2Positive, na.rm = TRUE),
    sum_neg = sum(Vannstand2Negative, na.rm = TRUE)) %>%
    mutate(percent_pos = ifelse(is.na(sum_pos), NA, sum_pos / sum(sum_pos) * 100),
    percent_neg = ifelse(is.na(sum_neg), NA, sum_neg / sum(sum_neg) * 100))

    Este código calcula el porcentaje tanto para valores positivos como para valores negativos por separado y produce una tabla con columnas para categoría, año, suma de valores positivos, suma de valores negativos, porcentaje de valores positivos y porcentaje de valores negativos.

    Ten en cuenta que si tanto los valores positivos como los negativos están ausentes (es decir, tanto sum_pos como sum_neg son NA), entonces los valores de porcentaje correspondientes también serán NA. Si deseas manejar este caso de manera diferente, puedes modificar la sentencia ifelse en consecuencia.

Comments are closed.