Mutar por un elemento de columna basándose en una condición.
Estoy tratando de mutar una columna de tal manera que:
1) El dataframe se agrupa según el error.
2) La columna mutada (treatmentToGrowthRatio) es igual a:
valor / (valor tal que el tratamiento == “Crecimiento”).
Lo que tengo:
df <- tibble(
type = as.factor(c("bug1", "bug1", "bug1", "bug2", "bug2", "bug2", "bug3", "bug3", "bug3", "blank")),
treatment = c(rep(c("TreatA", "TreatB", "Growth"),3), "Blank"),
value = 1:10
)
La operación que busco:
df %>%
group_by(bug) %>%
mutate(
treatmentToGrowthRatio =
value/
## valor donde el tratamiento == crecimiento
## (es decir, para bug 1 = 3; para bug 2 = 6; para bug 3 = 9; para Blank = NA)
)
Para obtener el resultado deseado:
dfFinal <- tibble(
type = as.factor(c("bug1", "bug1", "bug1", "bug2", "bug2", "bug2", "bug3", "bug3", "bug3", "blank")),
treatment = c(rep(c("TreatA", "TreatB", "Growth"),3), "Blank"),
value = 1:10,
treatmentToGrowthRatio = c(1/3, 2/3, 1, 4/6, 5/6, 1, 7/9, 8/9, 1, NA)
)
Lo más cercano que he llegado muestra treatmentToGrowthRatio = 1 donde Treatment == “Growth” con:
df %>% group_by(type) %>%
mutate(
treatmentToGrowthRatio =
value/
case_when(
str_detect(treatment,
"Crecimiento") ~ value
)
)
Aprecio cualquier idea. ¡Gracias!
davy.ai
Para obtener el resultado deseado, puedes utilizar el siguiente código:
“`{r}
dfFinal <- df %>%
group_by(type) %>%
mutate(treatmentToGrowthRatio = value[which(treatment == ‘Growth’)] / value)
dfFinal$treatmentToGrowthRatio[is.na(dfFinal$treatmentToGrowthRatio)] <- NA
“`
Explicación:
group_by()
.mutate()
.which()
para encontrar el índice de la fila donde “treatment” es igual a “Growth” y luego seleccionamos la columna “value” utilizando ese índice. La división se realiza elemento a elemento porque el dataframe está agrupado.is.na()
.¡Esto debería darnos el resultado deseado!