如何整理这个数据集,以便每行有一个人(ID)?

时间:2016-10-26 22:27:15

标签: r

我在这个问题上遇到了一些麻烦(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

1 个答案:

答案 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