2017-07-05 2 views
0

Ich versuche, den Durchschnitt Batting Durchschnitt pro Team zu finden. Ich habe eine matrix, die ähnlich ist, was ich unten haben:R: Atomzahl und Mittelwerte in Listen

 bat_avg  team_name 
    [1,] "0.5"  "Rockies" 
    [2,] "0"   "Astros" 
    [3,] "0.5"  "Rockies" 
    [4,] "0"   "Padres" 
    [5,] "0"   "Padres" 
    [6,] "0"   "Rockies" 
    [7,] "0"   "Mets" 
    [8,] "0.4"  "Red Sox" 
    [9,] "0"   "Yankees" 
    [10,] "0"   "Rockies" 

Um pro Team die durchschnittliche Beize Durchschnitt zu finden Ich habe versucht, die Matrix in einem Datenrahmen zu transformieren und versucht, die Daten, die von den Teamnamen zu aggregieren. Ich erhalte weiterhin den Fehler, dass mein Datentyp atomar ist. Ich bin mir nicht sicher, was ich tun soll, um dieses Problem zu lösen. Ich bin brandneu in R und Codierung, also danke für die Hilfe!

bat_avg <- Batting_average[,26] 
team_name <- Batting_average[,100] 
Batting_average <- cbind(bat_avg, team_name) 
df.Batting_average <- as.data.frame(Batting_average) 

aggdata <- aggregate(Batting_average$team_name, by list(Batting_average$bat_avg], 
FUN = mean) 

Unten ist die Spitze meiner Daten

structure(c("0.5", "0", "0.5", "0", "0", "0", "Rockies", "Rockies", 
"Rockies", "Rockies", "Rockies", "Rockies"), .Dim = c(6L, 2L),n.Dimnames = list(
NULL, c("bat_avg", "team_name"))) 
+0

Ich habe versucht, meine Daten zu dput(), aber die Länge der Daten verhindert mich von der Buchung. –

+0

Erstelle ein minimales Beispiel dann zB: dput (head (data)) –

+0

Ich denke du brauchst 'aggregate (Batting_average $ team_name, by = Liste (Batting_average $ bat_avg), FUN = mean)' –

Antwort

0

Hier einige Code, vernünftige Ergebnisse gab mir

myDf <- data.frame(
    avg = c(0.5, 0, 0.5, 0, 0, 0, 0.4), 
    team = c("Rockies", "Rockies", 
    "Rockies", "Rockies", "Rockies", "Rockies", "Astros") 
) 

myDf 
# avg team 
# 1 0.5 Rockies 
# 2 0.0 Rockies 
# 3 0.5 Rockies 
# 4 0.0 Rockies 
# 5 0.0 Rockies 
# 6 0.0 Rockies 
# 7 0.4 Astros 

aggregate(myDf$avg, by = list(myDf$team), FUN = mean) 
# Group.1   x 
# 1 Astros 0.4000000 
# 2 Rockies 0.1666667 

Wenn Sie diese mit Ihren Daten ausführen möchten, ersetzen myDf mit

myDf <- data.frame(
    avg = as.numeric(Batting_average[,26]), 
    team = as.factor(Batting_average[,100]) 
) 

Die Methoden as.numeric und as.factor sind möglicherweise nicht erforderlich, wenn Ihre Daten bereits im richtigen Format vorliegen.

+0

Wie würde ich dies auf meinen Datenrahmen anwenden, der 27000 Zeilen hat? Bei der Definition von "avg" und "team" würde sich das von dem unterscheiden, was Sie haben ? –

+0

Die Größe des Datensatzes macht keinen Unterschied in "Aggregat". Stellen Sie nur sicher, dass Ihre Daten im richtigen Format sind und führen Sie es durch diesen Code. Ich werde meine Antwort bearbeiten, um dies klarer zu machen –

+0

Als ich dies in meine eingegeben Ich erhalte den folgenden Fehler "Fehler in aggregate.data.frame (as.data.frame (x), ...): keine Zeilen zu aggregieren" Entschuldigung für was m Sie sind eine dumme Frage. Ich habe gerade angefangen, mit R. zu arbeiten. –