2017-04-07 45 views
-2

我有包含日期​​,user_id,步数,心率的数据。基于两个向量的dplyr变异(基于2列分组计算第3列)

我想使用dplyrmutate给我一个每天每个user_id具有平均心率的列。每位用户在一天中有多次心率记录。 (注:我追加的列B/C我想保持其他列的信息,如“步”)

代码,以生成数据样本

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) 

理想的情况下它会是这个样子

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

没有尝试'东风7%>%GROUP_BY(日期,users_user_id)%>%变异(day_avg =平均值(avg_heart_rate))'? – Sotos

+0

谢谢,这个工程,我使用'df7 $ avg_heart_rate'而不是'avg_heart_rate' ...我的愚蠢的错误 –

回答

0

第一个summarise然后join的结果。

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

'summarize()/ join()'是没有必要的。一个简单的'mutate()'在这里可以正常工作(如注释和重复答案中所示) – MrFlick