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.

Utilizando group by para obtener el valor correspondiente al valor máximo de otra columna.

En mi conjunto de datos, los encuestados están agrupados y hay datos disponibles sobre su edad. Quiero que todas las personas en el mismo grupo tengan el valor de la persona más vieja en ese grupo.

Entonces, mi conjunto de datos de ejemplo se ve así.

      df <- data.frame(groups = c(1,1,1,2,2,2,3,3,3), 
                       age = c(12, 23, 34, 13, 24, 35, 13, 25, 36), 
                       value = c(1, 2, 3, 4, 5, 6, 7, 8, 9))

> df
  groups age value
1      1  12     1
2      1  23     2
3      1  34     3
4      2  13     4
5      2  24     5
6      2  35     6
7      3  13     7
8      3  25     8
9      3  36     9

Y quiero que se vea así:

> df
  groups age value new_value
1      1  12     1         3
2      1  23     2         3
3      1  34     3         3
4      2  13     4         6
5      2  24     5         6
6      2  35     6         6
7      3  13     7         9
8      3  25     8         9
9      3  36     9         9

¿Alguna idea de cómo hacer esto con dplyr?

He intentado algo así, pero no funciona

df %>%
  group_by(groups) %>%
  mutate(new_value = df$value[which.max(df$age)])
Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Para obtener la salida deseada utilizando dplyr, se necesita usar la función max para encontrar el valor de edad más alto dentro de cada grupo, y luego usar la función mutate para crear una nueva columna con ese valor. Aquí está el código:

    df %>%
      group_by(groups) %>%
      mutate(new_value = max(age))
    

    Esto agrupará los datos por la columna “groups” y luego agregará una nueva columna “new_value” que contiene la edad máxima dentro de cada grupo.

Comments are closed.