我在这个问题上遇到了一些麻烦(r新手)。我希望每个人的ID是一行。有些人比其他人有更多的体重测量值(实际上在实例中从7到NA不等)。
1)我如何传播数据,以便每个人只有一行?
2)如何只显示> 1次测量的每个人的平均体重?
非常感谢
ID Weight Year
1001 48 2014
1001 50 2015
1002 70 2014
1003 72 2012
1003 75 2015
1003 78 2007
1003 74 2003
答案 0 :(得分:1)
用tidyr:
d <- data.frame(ID = c(1001, 1001, 1002, 1003, 1003, 1003, 1003),
Weight = c(48, 50, 70, 72, 75, 78, 74),
Year = c(2014, 2015, 2014, 2012, 2015, 2007, 2003))
library(tidyr)
d %>%
spread(Year, Weight)
ID 2003 2007 2012 2014 2015
1 1001 NA NA NA 48 50
2 1002 NA NA NA 70 NA
3 1003 74 78 72 NA 75
@ Floo0为使用tidyr计算均值提供了一个很好的选择。
或与base:
reshape(d,
idvar = "ID",
v.names = "Weight",
timevar = "Year",
direction = "wide")
ID Weight.2014 Weight.2015 Weight.2012 Weight.2007 Weight.2003
1 1001 48 50 NA NA NA
3 1002 70 NA NA NA NA
4 1003 NA 75 72 78 74
计算均值
aggregate(Weight ~ ID, data = d, FUN = mean)
ID Weight
1 1001 49.00
2 1002 70.00
3 1003 74.75