2017-07-22 1 views
2

Ich manipuliere einen Datensatz, aber ich kann die Dinge nicht richtig machen.Wie Mittel zu einer vorhandenen Spalte in R hinzugefügt werden

Hier ist ein Beispiel dafür, wobei df der Name des Datenrahmens ist.

year ID value 
2013 1 10 
2013 2 20 
2013 3 10 
2014 1 20 
2014 2 20 
2014 3 30 
2015 1 20 
2015 2 10 
2015 3 30 

Also habe ich versucht, einen anderen Datenrahmen df1 <- aggregate(value ~ year, df, mean, rm.na=T)

und machte diese Datenrahmen df1 zu machen: jeder bedeuten für Jahr

year ID value 
2013 avg 13.3 
2014 avg 23.3 
2015 avg 20 

Aber ich will in jeder Reihe von df hinzuzufügen.

Die erwartete Form ist:

year ID value 
2013 1 10 
2013 2 20 
2013 3 10 
2013 avg 13.3 
2014 1 20 
2014 2 20 
2014 3 30 
2014 avg 23.3 
2015 1 20 
2015 2 10 
2015 3 30 
2015 avg 20 

Antwort

1

Hier ist eine Option mit data.table, wo wir die 'data.frame' auf 'data.table' (setDT(df)), gruppiert nach 'Jahr' umwandeln, bekommen die ' mean von 'Wert' und 'ID' als 'avg', dann rbindlist verwenden sowohl die Datensätze und order von 'Jahr'

library(data.table) 
rbindlist(list(setDT(df), df[, .(ID = 'avg', value = mean(value)), year]))[order(year)] 
# year ID value 
# 1: 2013 1 10.00000 
# 2: 2013 2 20.00000 
# 3: 2013 3 10.00000 
# 4: 2013 avg 13.33333 
# 5: 2014 1 20.00000 
# 6: 2014 2 20.00000 
# 7: 2014 3 30.00000 
# 8: 2014 avg 23.33333 
# 9: 2015 1 20.00000 
#10: 2015 2 10.00000 
#11: 2015 3 30.00000 
#12: 2015 avg 20.00000 

Oder mit bis zu rbind th e OP-Methode, rbind sowohl die Datensätze und dann order

df2 <- rbind(df, transform(df1, ID = 'avg')) 
df2 <- df2[order(df2$year),] 
+0

Thank you very much! Es war wirklich hilfreich :) –

+0

@ YangS.Thank Sie für die Kommentare. Sie können auch [hier] (https://stackoverflow.com/help/someone-answers) überprüfen – akrun

Verwandte Themen