2009-09-16 15 views
8

Ho imparato R giocando, e sto cominciando a pensare che sto abusando della funzione di spillo. Ci sono modi migliori per fare alcune delle seguenti azioni? Certo, funzionano, ma man mano che diventano più complessi mi chiedo se sto perdendo le opzioni migliori. Sto cercando qualche critica, qui:Rompere l'abitudine di drogato di tapping

tapply(var1, list(fac1, fac2), mean, na.rm=T) 

tapply(var1, fac1, sum, na.rm=T)/tapply(var2, fac1, sum, na.rm=T) 

cumsum(tapply(var1, fac1, sum, na.rm=T))/sum(var1) 

Aggiornamento: Ecco alcuni dati di esempio ...

 var1 var2 fac1   fac2 
1  NA 275.54 10  (266,326] 
2  NA 565.89 10  (552,818] 
3  NA 815.41 6  (552,818] 
4  NA 281.77 6  (266,326] 
5  NA 640.24 NA  (552,818] 
6  NA 78.42 NA  [78.4,266] 
7  NA 1027.06 NA (818,1.55e+03] 
8  NA 355.20 NA  (326,552] 
9  NA 464.52 NA  (326,552] 
10  NA 1397.11 10 (818,1.55e+03] 
11  NA 229.82 NA  [78.4,266] 
12  NA 542.77 NA  (326,552] 
13  NA 829.32 NA (818,1.55e+03] 
14  NA 284.78 NA  (266,326] 
15  NA 194.97 10  [78.4,266] 
16  NA 672.55 8  (552,818] 
17  NA 348.01 10  (326,552] 
18  NA 1550.79 9 (818,1.55e+03] 
19 101.98 101.98 4  [78.4,266] 
20  NA 292.80 6  (266,326] 

Aggiornamento dump dei dati:

structure(list(var1 = c(NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
NA, NA, NA, NA, NA, NA, NA, NA, 101.98, NA), var2 = c(275.54, 
565.89, 815.41, 281.77, 640.24, 78.42, 1027.06, 355.2, 464.52, 
1397.11, 229.82, 542.77, 829.32, 284.78, 194.97, 672.55, 348.01, 
1550.79, 101.98, 292.8), fac1 = c(10L, 10L, 6L, 6L, NA, NA, NA, 
NA, NA, 10L, NA, NA, NA, NA, 10L, 8L, 10L, 9L, 4L, 6L), fac2 = structure(c(2L, 
4L, 4L, 2L, 4L, 1L, 5L, 3L, 3L, 5L, 1L, 3L, 5L, 2L, 1L, 4L, 3L, 
5L, 1L, 2L), .Label = c("[78.4,266]", "(266,326]", "(326,552]", 
"(552,818]", "(818,1.55e+03]"), class = "factor")), .Names = c("var1", 
"var2", "fac1", "fac2"), row.names = c(NA, -20L), class = "data.frame") 
+1

Proprio come un commento: mentre questi sono esempi chiari, sarebbe più facile per aiutare se hai fornito i dati di esempio per var1, FAC1, ecc – Shane

+0

Buon punto. Campione di dati aggiunto. – Totovader

+1

Suggerimento: è possibile utilizzare la funzione dput() per estrarre la struttura di tali dati di esempio e quindi incollare qui i risultati? Lo rende un gioco da ragazzi per importare. –

risposta

4

Da parte 1 preferisco aggregate perché mantiene i dati in un formato di osservazione per riga più simile a R.

aggregate(var1, list(fac1, fac2), mean, na.rm=T)