estoy tratando de entender cómo reemplazar los valores condicionales en una trama de datos sin necesidad de utilizar un bucle. Mi trama de datos está estructurada de la siguiente manera:sustitución condicional de valores en una hoja.de.datos
> df
a b est
1 11.77000 2 0
2 10.90000 3 0
3 10.32000 2 0
4 10.96000 0 0
5 9.90600 0 0
6 10.70000 0 0
7 11.43000 1 0
8 11.41000 2 0
9 10.48512 4 0
10 11.19000 0 0
y la salida dput
es la siguiente:
structure(list(a = c(11.77, 10.9, 10.32, 10.96, 9.906, 10.7,
11.43, 11.41, 10.48512, 11.19), b = c(2, 3, 2, 0, 0, 0, 1, 2,
4, 0), est = c(0, 0, 0, 0, 0, 0, 0, 0, 0, 0)), .Names = c("a",
"b", "est"), row.names = c(NA, -10L), class = "data.frame")
Lo que yo quiero hacer, es comprobar el valor de b
. Si b
es 0, deseo establecer est
a un valor entre a
. Entiendo que df$est[df$b == 0] <- 23
establecerá todos los valores de est
en 23, cuando b==0
. Lo que no entiendo es cómo establecer est
en un valor de a
cuando esa condición es verdadera. Por ejemplo:
df$est[df$b == 0] <- (df$a - 5)/2.533
da la siguiente advertencia:
Warning message:
In df$est[df$b == 0] <- (df$a - 5)/2.533 :
number of items to replace is not a multiple of replacement length
¿Hay alguna manera de que me puede pasar la celda correspondiente, en lugar de vectores?
Esto merece un upvote si primero añadir ya sea un enlace a la página de I-Inferno , o resuma los problemas con '$' (o idealmente ambos). – Andrie
+1 Aunque creo que el operador '$' está perfectamente bien en este caso. (Además, observo que a pesar de tu advertencia, usas '$' tú mismo ...) – Andrie
@Andrie: sí, lo usé donde funciona (no es mucha la ayuda :-)). El OP intentó usarlo para definir en qué elementos se estaba actuando, que es donde comenzó el problema. Acabo de usarlo para definir una condición que selecciona elementos de marco de datos. Pero lo sabías :-) –