Sto cercando di capire come sostituire i valori condizionali in un dataframe senza utilizzare un ciclo. La mia struttura dei dati è strutturata come segue:Sostituzione condizionale dei valori in un data.frame
> 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
e l'uscita dput
è questo:
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")
Quello che voglio fare, è quello di verificare il valore di b
. Se b
è 0, voglio impostare est
su un valore da a
. Capisco che df$est[df$b == 0] <- 23
imposterà tutti i valori di est
a 23, quando b==0
. Quello che non capisco è come impostare est
su un valore di a
quando tale condizione è vera. Per esempio:
df$est[df$b == 0] <- (df$a - 5)/2.533
ha pronunciato la seguente avvertenza:
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
C'è un modo che io possa passare il cellulare in questione, invece di vettore?
questo merita un upvote se si aggiunge prima o un link alla pagina R-Inferno , o riepilogare i problemi con '$' (o idealmente entrambi). – Andrie
+1 Anche se penso che l'operatore '$' stia perfettamente bene in questo caso. (Inoltre, noto che nonostante il tuo avviso tu usi '$' te stesso ...) – Andrie
@Andrie: sì, l'ho usato dove funziona (non che sia molto utile :-)). L'OP ha cercato di usarlo per definire su quali elementi si stava agendo, ed è qui che sono iniziati i problemi. L'ho usato solo per definire una condizione che selezionava gli elementi del dataframe. Ma tu lo sapevi :-) –