2017-11-09 5 views
0

Ich bin noch neu in R und viele Dinge sind immer noch schwer zu erfüllen. Die Gemeinschaft hier war sehr hilfreich! Ich habe noch ein anderes Problem. 1. eine neue Beobachtung für jede Gruppe erstellen, dass die Summe (oder gewichtete Summe) bestimmter Variablen 2. Erstellen einer gewichteten Summe für eine Variable, die in manchmal hat NA wäre esNeue Beobachtung nach Gruppe einfügen, das ist eine Summe (oder gewichtete Summe) in r

Meine Daten-Set:

df = structure(list(ID = c(1L, 1L, 2L, 2L, 3L, 3L, 4L, 4L, 4L), ID_name = c("AA", "AA", "BB", "BB", "CC","CC", "DD","DD","DD"), 
    Volume = c(10L, 20L, 30L, 50L, 50L, 40L, 20L, 
    30L, 10L), Score= c(0.1L, 0.3L, 0.5L, NA, 0.6L, NA, 
    0.6L, 0.2L, 0.6L)).Names = c("ID", "ID_name","Volume","Score"), class = "data.frame", row.names = c(NA, -9L)) 

ich möchte 1.Erstellen eine neue Beobachtung für jede eindeutige ID, ist, dass ID 1, ID 2, ID 3 und ID 4

2. diese haben neue Beobachtungen sind wie folgt: ID ID_name Volumen Punktzahl (gewichteter Durchschnitt) 1 AA 30 (das ist 10 + 20) (10 * 0,1 + 0,3 * 20)/(10 + 20) = 0,23 2 BB 80 (30 +50) (30 * 0.5) /30=0.5 (Die NA - Reihe wird bei der Berechnung ignoriert) 3 CC 90 (50 + 40) (60 * 0,6)/60 = 0,6 (Die NA - Reihe wird bei der Berechnung ignoriert) 4 DD 60 (20 + 30 + 10) (20 * 0.6 + 30 * 0.2 + 10 * 0.6) /60=0.4

Ich versuchte muate Funktion, aber das scheint nicht zu funktionieren. Alle Leads würden sehr geschätzt werden. Dank

+0

Es ist etwas falsch mit der 'dput' Sie. – AntoniosK

Antwort

0
library(dplyr) 

df = data.frame(ID = c(1L, 1L, 2L, 2L, 3L, 3L, 4L, 4L, 4L), 
       ID_name = c("AA", "AA", "BB", "BB", "CC", "CC", "DD", "DD", "DD"), 
       Volume = c(10L, 20L, 30L, 50L, 50L, 40L, 20L, 30L, 10L), 
       Score = c(0.1, 0.3, 0.5, NA, 0.6, NA, 0.6, 0.2, 0.6)) 


df %>% 
    mutate(HasScore = ifelse(is.na(Score), 0, 1)) %>% 
    group_by(ID, ID_name) %>% 
    summarise(WA = sum(Volume*Score, na.rm = T)/sum(Volume*HasScore), 
      Volume = sum(Volume)) %>% 
    ungroup() 

# # A tibble: 4 x 4 
#  ID ID_name  WA Volume 
# <int> <fctr>  <dbl> <int> 
# 1  1  AA 0.2333333  30 
# 2  2  BB 0.5000000  80 
# 3  3  CC 0.6000000  90 
# 4  4  DD 0.4000000  60 
+1

AntoniosK, die eleganten Linien der Codes arbeiteten wie Magie! Vielen Dank, also so sehr !!!!!! –