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.

Asigne el valor máximo a la columna ID.

Tengo lo siguiente:

a <- c("ID_A", "ID_B", "Count")
b <- c("1", "1015", "19389")
c <- c("1", "1019", "206")
d <- c("1", "1027", "1210")
e <- c("2", "1019", "206")
f <- c("2", "1027", "1210")
df <- data.frame(a, b, c, d, e, f)

Quiero primero transponer los datos (pivot_wider), es decir, eliminar las columnas abcdef.
Luego, quiero extraer el valor máximo de Count, crear una nueva variable (mutate) que tenga el IDB de ese valor máximo.

Algo como esto, con pivot_wider para quitar abcdef:

a <- c("ID_A", "ID_B", "Count", "ID_B del valor más alto")
b <- c("1", "1015", "19389", "1015")
c <- c("1", "1019", "206", "1015")
d <- c("1", "1027", "1210", "1015")
e <- c("2", "1019", "206", "1027")
f <- c("2", "1027", "1210", "1027")
new_df <- data.frame(a, b, c, d, e, f)

Intenté group_by, sum, mutate. No funciona.
¡Ayuda por favor!
¡Muchas gracias!

Tags:  ,

Answer

  1. Avatar for davy.ai

    Para lograr la salida deseada, puede usar la función pivot_wider() del paquete tidyr para remodelar los datos y luego usar una combinación de las funciones mutate() y which.max() para extraer el valor máximo de Count y el ID_B correspondiente. Aquí está el código:

    “`{r}
    library(tidyr)
    library(dplyr)

    crear marco de datos

    a <- c(“ID_A”, “ID_B”, “Count”)
    b <- c(“1”, “1015”, “19389”)
    c <- c(“1”, “1019”, “206”)
    d <- c(“1”, “1027”, “1210”)
    e <- c(“2”, “1019”, “206”)
    f <- c(“2”, “1027”, “1210”)
    df <- data.frame(a, b, c, d, e, f)

    remodelar para eliminar abcdef

    new_df <- df %>%
    pivot_wider(names_from = “a”, values_from = c(“b”, “c”, “d”, “e”, “f”))

    mutar nueva variable para almacenar el ID_B del valor de Conteo más alto

    new_df <- new_df %>%
    mutate(max_count = apply(select(new_df, starts_with(“Count”)), 1, max),
    max_ID_B = apply(select(new_df, starts_with(“ID_B”)), 1, function(x) x[which.max(select(new_df, starts_with(“Count”)))]))

    renombrar columnas

    colnames(new_df) <- c(“ID_A”, “ID_B”, “Count”, “ID_B del valor máximo”, “max_count”, “max_ID_B”)

    seleccionar columnas deseadas

    new_df <- new_df %>% select(“ID_A”, “ID_B”, “Count”, “ID_B del valor máximo”)
    “`

    El marco de datos new_df resultante tendrá la salida deseada con una nueva columna que contiene el valor ID_B de la fila con el valor de Conteo más alto.

Comments are closed.