2017-04-07 1 views
-2

Ich habe Daten, die Datum, User_ID, Schritte, Herzfrequenz enthält.dplyr mutieren basierend auf zwei Vektoren (Berechnung einer dritten Spalte basierend auf Gruppierung aus 2 Spalten)

Ich versuche dplyrmutate zu verwenden, um mir eine Spalte zu geben, die die durchschnittliche Herzfrequenz pro Tag pro user_id haben wird. Es gibt mehrere Aufnahmen für die Herzfrequenz während des Tages pro Benutzer. (Anmerkung: Ich anhängt eine Spalte b/c Ich möchte für andere Spalten Informationen zu halten, wie ‚Schritte‘)

Code Datenprobe zu erzeugen

df7 <- data.frame( date=c('2016-11-01','2016-11-01','2016-11-01','2016-11-01','2016-11-02','2016-11-02','2016-11-02','2016-11-02'), 
       users_user_id=c(6,6,7,7,6,6,7,7), 
       steps=c(500,2000,500,2000,600,3000,600,3000), 
       avg_heart_rate=c(70,80,70,80,80,90,80,90)) 
df7$date <- as.Date(df7$date) 

Idealfall wäre es so etwas wie dieses

aussehen
date  users_user_id steps average_heart_rate day_avg_hr 
2016-11-01 6    500  70     75 
2016-11-01 6    2000 80     75 
2016-11-01 7    500  70     75 
2016-11-01 7    2000 80     75 
2016-11-02 6    600  80     85 
2016-11-02 6    3000 90     85 
2016-11-02 7    600  80     85 
2016-11-02 7    3000 90     85 
+3

haben Sie versuchen 'DF7%>% group_by (Datum, users_user_id)%>% mutieren (day_avg = Mittelwert (avg_heart_rate))'? – Sotos

+0

Danke, das funktioniert, ich benutzte 'df7 $ avg_heart_rate' anstatt nur' avg_heart_rate' ... mein blöder Fehler –

Antwort

0

Zuerst summarise dann join die Ergebnisse.

new.df <- df7 %>% 
    group_by(., date, users_user_id) %>% 
    summarise(., day_avg_hr = mean(avg_heart_rate)) %>% 
    ungroup() %>% 
    left_join(df7, .) 
+0

Die 'summarize()/join()' ist nicht notwendig. Ein einfaches 'mutate()' würde hier gut funktionieren (wie in den Kommentaren und der doppelten Antwort angegeben) – MrFlick

Verwandte Themen