2016-05-10 8 views
2

Ein wenig Hintergrund: Dies ist Code, um die durchschnittliche Strecke eine Maus namens BOE 1 während der Studie über die Korsik von 12 Tagen, mit 4 gereist Wiederholungen des Experiments jeden Tag. In jedem Datensatz werden 19 Mäuse getestet.Versuchen, diesen Code in r eleganter und kürzer zu machen, wenn möglich - R

Problem: Ich möchte die mittlere zurückgelegte Entfernung für jede Maus berechnen und in einer Tabelle ablegen. Was ich habe funktioniert, aber ich war neugierig, ob es einen Weg gab, um den folgenden Code kürzer und weniger wiederholend zu machen.

Optionen versucht:

mean(BOE.1Data$Distance.cm[BOE.1Data$Day == c(1,2, ect)] 
mean(BOE.1Data$Distance.cm[BOE.1Data$Day == c(1|2| ect)] 
mean(BOE.1Data$Distance.cm[BOE.1Data$Day == c(1&2& ect)] 

Keine von diesen für mich gearbeitet haben.

Code:

Distance.1 = c(mean(BOE.1Data$Distance.cm[BOE.1Data$Day == 1]), 
       mean(BOE.1Data$Distance.cm[BOE.1Data$Day == 2]), 
       mean(BOE.1Data$Distance.cm[BOE.1Data$Day == 3]), 
       mean(BOE.1Data$Distance.cm[BOE.1Data$Day == 4]), 
       mean(BOE.1Data$Distance.cm[BOE.1Data$Day == 5]), 
       mean(BOE.1Data$Distance.cm[BOE.1Data$Day == 6]), 
       mean(BOE.1Data$Distance.cm[BOE.1Data$Day == 7]), 
       mean(BOE.1Data$Distance.cm[BOE.1Data$Day == 8]), 
       mean(BOE.1Data$Distance.cm[BOE.1Data$Day == 9]), 
       mean(BOE.1Data$Distance.cm[BOE.1Data$Day == 10]), 
       mean(BOE.1Data$Distance.cm[BOE.1Data$Day == 11]), 
       mean(BOE.1Data$Distance.cm[BOE.1Data$Day == 12])) 
+0

Willkommen bei Stackoverflow. Bitte geben Sie eine [MCVE] –

+0

Dies sieht so aus, als ob Sie wollen 'mit (BOE.1Data, tapply (Distance.cm, Day, mean))' aber ohne Beispieleingabe und gewünschte Ausgabe ist es schwer zu sagen. – MrFlick

Antwort

3

Sie können diese by() mit tun:

by(BOE.1Data$Distance.cm, BOE.1Data$Day, mean) 
+0

Das funktionierte wie ein Zauber! Ich danke dir sehr! – albeit2

0
n <- numeric(length(12)) 
for (i in 1:12) { 
    n[i] <- mean(BOE.1Data$Distance.cm[BOE.1Data$Day == i]) 
} 
+0

1. Vermeiden Sie For-Schleifen in R 2. Ihr Code funktioniert offensichtlich nicht so, wie Sie es sich vorgestellt haben. –

+1

Mir wurde beigebracht, dass Sie _fors Schleifen verwenden sollten, um den Code kürzer zu machen. Ich versuche nur, hilfreich zu sein und biete einen Weg an, über den ich das Problem angehen würde, aber ich bin halb neu und ohne die Daten zum Testen des Codes kann ich die Genauigkeit meines Codes nicht garantieren. –

2

Ein Ansatz mit data.table. Konvertieren Sie die 'data.frame' auf 'data.table' (setDT(BOE.1Data)), gruppiert nach 'Day', erhalten wir die mean von 'Distance.cm'

library(data.table) 
setDT(BOE.1Data)[, .(MeanDist = mean(Distance.cm)) , by = Day] 
0

Ein anderer Ansatz dplyr und magrittr, verwendet arrange() zu stellen Sie sicher, dass sie in Ordnung sind.

Distance.1 <- BOE.1Data %>% group_by(Day) %>% 
     mutate(mean_dist=mean(Distance.cm)) %>% 
     arrange(Day) %$% mean_dist