2017-04-26 5 views
-4

Ich möchte den Mittelwert von m für alle Altersgruppen und den Mittelwert von f für alle Altersgruppen dann von den ursprünglichen Werten subtrahieren.Wie fasst man ähnliche Zeilen zusammen?

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 

gewünschte Ausgabe:

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

Ihre 'dif' Werte scheinen falsch zu sein für Männer. – Axeman

+0

Haben Sie überhaupt gesucht? Du kannst die Antwort einfach finden, indem du nach ... suchst ... Jedenfalls kannst du den Mittelwert von m erhalten, zum Beispiel indem du 'mean (data $ height [data $ sex ==" m "]) machst –

Antwort

2

eine Gruppierung in dplyr Verwendung ist ganz einfach:

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 
Verwandte Themen