Creando un número aleatorio con valor constante dentro de grupos.
Estoy creando un número aleatorio donde cada miembro de un grupo específico tiene el mismo valor de la variable. Encontré una solución, pero sospecho que no es muy eficiente. Me pregunto si alguien tiene una forma de hacer esto en una línea de código:
library(dplyr)
data(mtcars)
t1 <- Sys.time() #¿Se pueden reemplazar las siguientes dos líneas por una?
a <- data.frame(random = runif(3, 0, 6),
cyl = seq(4,8,2))
merged <- merge(mtcars, a, by = 'cyl')
t2 <- Sys.time()
t2 - t1
#Verificar que funcione correctamente
merged %>%
group_by(cyl) %>%
summarise(across(random, sd))
davy.ai
Sí, es posible lograr esto en una línea de código utilizando la función
mutate()
y la funcióngroup_by()
dedplyr
:En este caso, utilizamos declaraciones
ifelse
anidadas para generar un número aleatorio entre 0 y 6 para cada grupo, basado en la variablecyl
. Luego, agrupamos los datos porcyl
, llenamos los valores faltantes con el último valor no faltante dentro del grupo y finalmente desagrupamos los datos.