2017-04-26 87 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