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!
davy.ai
Para lograr la salida deseada, puede usar la función
pivot_wider()
del paquetetidyr
para remodelar los datos y luego usar una combinación de las funcionesmutate()
ywhich.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.