2017-05-15 4 views
1

Ich bin derzeit mit einem Datenmanipulationsproblem in R konfrontiert, für das ich bisher keine Lösung gefunden habe (obwohl es viele scheinbar ähnliche Probleme gibt, die mich jedoch nicht auf den richtigen Weg gebracht haben) noch).Bedingte Mittelwerte in R

Beschreibung der Beispieldaten: Die Nummern (1-3) beziehen sich auf separate Entitäten, über die ein Befragter befragt wird. Diese Entitäten haben unterschiedliche Rollen (x) und Attribute (y).

ID x1 x2 x3 y1 y2 y3 
A 1 1 5 4 3 2 
B 2 2 2 3 4 5 

Der hier wichtige Punkt ist, dass x1 y1 verbunden ist, x2 y2 usw.

Ziel: Für jeden Fall. Ich möchte für jede Rolle x eine mittlere Punktzahl für y haben (in getrennten, zusätzlichen Spalten, zB m1, m2, m3, m4, m5)

Beispiel:

  • Für ID == A wir erwarten für x == 1: (4 + 3)/2 = 3.5 ["2" wird nicht benötigt, da der "verknüpfte" Wert von x3 nicht gleich 1 ist]
  • Für ID == A würden wir erwartet für x == 3: (2)/1 = 2
  • Für ID == B erwarten wir für x == 1: NA
  • Für ID == B erwarten wir für x == 2: (3 + 4 + 5)/3 = 4

Irgendwelche Hinweise? Vielen Dank!

+3

Dieses nur sein kann mich dicht zu sein, aber Könnten Sie vielleicht Ihren Algorithmus näher erläutern, wie Sie diese bedingten Mittel erreichen können? –

+0

Haben Sie vor, dass der Datenpunkt bei A: x3 3 statt 5 ist, basierend auf "Für ID == A würden wir für x == 3 erwarten: (2)/1 = 2"? –

+0

@ RomanLuštrik Vielen Dank, bitte lesen Sie den bearbeiteten Post. –

Antwort

0

Ich würde Ihre Daten zuerst restrukturieren, aber wenn man bedenkt, wie es ist, dies funktionieren könnte ...

df <- read.table(header = T, text = ' 
ID x1 x2 x3 y1 y2 y3 
A 1 1 3 4 3 2 
B 2 2 2 3 4 5 
') 

for (entity in 1:3) { 
    df[paste0('m', entity)] <- sapply(1:nrow(df), function(row) { 
    value <- mean(df[row, 5:7][df[row, 2:4] == entity]) 
    ifelse(is.nan(value), NA, value) 
    }) 
} 

df 

das gibt ...

ID x1 x2 x3 y1 y2 y3 m1 m2 m3 
1 A 1 1 3 4 3 2 3.5 NA 2 
2 B 2 2 2 3 4 5 NA 4 NA 
+0

das sieht ziemlich vielversprechend aus. Ich muss es später für das Studium entziffern, aber es tut sicherlich, was es tun soll. Vielen Dank! –