R- Establecer valores por grupo basados en una condición en un marco de datos.
Tengo el siguiente conjunto de datos.
grupo | valor | nombrefila | superposiciones |
---|---|---|---|
groupa | 4 | 1 | 2 |
groupa | 5 | 2 | 3, 5 |
groupa | 48 | 3 | 4, 5 |
groupa | 54 | 4 | 5 |
groupa | 12 | 5 | |
groupb | 12 | 6 | 7 |
groupb | 1 | 7 |
La columna “superposiciones” indica qué filas tienen cierta “superposición”.
Me gustaría, solo para las filas cuyo valor sea mayor que 10, reemplazar los datos en la columna de valor con cero para todas las filas indicadas en la respectiva columna de “superposiciones”.
Resultado esperado:
grupo | valor | nombrefila | superposiciones |
---|---|---|---|
groupa | 4 | 1 | 2 |
groupa | 5 | 2 | 3, 5 |
groupa | 48 | 3 | 4, 5 |
groupa | 0 | 4 | 5 |
groupa | 0 | 5 | |
groupb | 12 | 6 | 7 |
groupb | 0 | 7 |
Ejemplo reproducible:
data <- data.frame(group = c(“group_a”, “group_a”, “group_a”, “group_a”,
“group_a”, “group_b”, “group_b”),
value = c(4, 5 , 48, 54, 12, 12, 1),
row_name = c(“1”, “2”, “3”, “4”, “5”, “6”, “7”),
overlaps = c(“2”, “3, 5”, “4, 5”, “5”, “”, “7”, “”))
No sé si es un problema muy complejo, pero llevo horas atascado y no he podido resolverlo.
¿Alguien tiene alguna sugerencia sobre cómo puedo resolver esto, por grupo, usando dplyr o data.table?
davy.ai
Puedes utilizar
dplyr
para resolver este problema. Primero, puedes filtrar el data frame para incluir solo las filas con un valor mayor a 10. Luego, puedes utilizarmutate
para reemplazar los valores en la columnavalue
con 0 para todas las filas indicadas en la columnaoverlaps
.Esto te dará el resultado esperado: