2016-10-26 1 views
-1

私はこれに少し問題があります(rの新機能)。 IDを個人ごとに1行にしたい。一部の人は他の人よりも多くの体重測定値を持っています(実際の例では7からNAまで変化します)。行ごとに1つの個人(ID)が存在するようにこのデータセットを整理する方法はありますか?

1)個人ごとに1行しか持たないようにデータを広げるにはどうすればよいですか?

2)測定値> 1以上の各個体の平均体重のみを表示するにはどうすればよいですか?

感謝tidyrで

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

を計算するためには、あなたが取得しようとしている出力を示してもらえますか? – Chris

答えて

1

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と手段を計算するための良いオプションを提供します。

または塩基と:

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 
+0

拡散後の平均値を取るには、次のように 'rowwise()'を使うことができます: 'd%>%spread(年、重み)%>%rowwise()%>%mutate(平均= '2007 \'、\ '2014 \'、\ '2015 \')、na.rm = T)) ' – yeedle

関連する問題