Ho un vettore che mi dice, per ogni riga in un frame data, l'indice di colonna per il quale il valore di questa riga deve essere aggiornato.Scegliere una cella per riga in frame di dati
> set.seed(12008); n <- 10000; d <- data.frame(c1=1:n, c2=2*(1:n), c3=3*(1:n))
> i <- sample.int(3, n, replace=TRUE)
> head(d); head(i)
c1 c2 c3
1 1 2 3
2 2 4 6
3 3 6 9
4 4 8 12
5 5 10 15
6 6 12 18
[1] 3 2 2 3 2 1
Ciò significa che per le righe 1 e 4, c3 deve essere aggiornato; per le righe 2, 3 e 5, c2 dovrebbe essere aggiornato (tra gli altri). Qual è il modo più pulito per ottenere questo in R usando operazioni vettorializzate, cioè senza apply
e amici? EDIT: E, se possibile, senza R loop?
Ho pensato di trasformare d
in una matrice e quindi di indirizzare gli elementi della matrice utilizzando un vettore unidimensionale. Ma poi non ho trovato un modo pulito per calcolare l'indirizzo unidimensionale dagli indici di riga e colonna.
È stato trasferito sul ramo 2.15.1? R-devel di solito significherebbe la prossima versione minore, cioè 2.16.x. –
@GavinSimpson - Bella cattura. Grazie. Guardando ancora, vedo ora la nota importante che "lo snapshot di sviluppo r59537 di R [...] alla fine diventerà R-2.16.0". Modificherà il mio post di conseguenza. –
Ci sarà anche un supporto analogo per matrici/array? – krlmlr