2017-04-26 42 views
-4

我想计算所有年龄段的平均值m和所有年龄段的平均值f,然后从原始值中减去它。如何总结类似的行?

data <- data.frame(height=c(96,72,100,45),age=c(1,2,1,2),sex=c("m","f","f","m")) 
data 
    height age sex 
1  96 1 m 
2  72 2 f 
3 100 1 f 
4  45 2 m 

所需的输出:

data 
    height age sex mean dif 
1  96 1 m 70.5 25.5 
2  72 2 f 86  -14 
3 100 1 f  86 14 
4  45 2 m 70.5 -25.2 
+0

你'dif'值似乎是错误的男性。 – Axeman

+0

你有没有做过任何搜索?你可以简单地通过搜索mean找到答案......无论如何,你可以通过做'mean(data $ height [data $ sex ==“m”])来获得m的均值。 –

回答

2

使用分组在dplyr这是很简单的:

library(dplyr) 

data %>% 
    group_by(sex) %>% 
    mutate(mean = mean(height), 
     dif = height - mean) 
Source: local data frame [4 x 5] 
Groups: sex [2] 

    height age sex mean dif 
    <dbl> <dbl> <fctr> <dbl> <dbl> 
1  96  1  m 70.5 25.5 
2  72  2  f 86.0 -14.0 
3 100  1  f 86.0 14.0 
4  45  2  m 70.5 -25.5