2014-09-26 96 views
1

我將通過示例來問我的問題,因爲我不知道最好的方式是什麼。使用內置的R ChickWeight數據集:R:使用該子集上的計算修改數據幀的子集

> head(ChickWeight) 
    weight Time Chick Diet 
1  42 0  1 1 
2  51 2  1 1 
3  59 4  1 1 
4  64 6  1 1 
5  76 8  1 1 
6  93 10  1 1 
> tail(ChickWeight) 
     weight Time Chick Diet 
573 155 12 50 4 
574 175 14 50 4 
575 205 16 50 4 
576 234 18 50 4 
577 264 20 50 4 
578 264 21 50 4 

我可以用ddply計算意味着每一個獨特的飲食,例如

> ddply(d, .(Diet), summarise, mean_weight=mean(weight, na.rm=TRUE)) 
    Diet mean_weight 
1 1 102.6455 
2 2 122.6167 
3 3 142.9500 
4 4 135.2627 

我該怎麼辦,如果我想很容易地創建一個數據幀修改ChickWeight中的「體重」列,將其除以相應飲食的平均體重?

+2

平均體重的百分之一列可能是你正在尋找這一點。 '庫(dplyr); ChickWeight%>%group_by(Diet)%>%mutate(weight = weight/mean(weight,na.rm = TRUE))' – akrun 2014-09-26 14:26:29

+2

或者因爲您使用'plyr':'ddply(d,。(Diet) ,w_weight =權重/平均值(權重,na.rm = TRUE))' – agstudy 2014-09-26 14:27:45

+0

謝謝。這兩種工作,都出於某種原因找不到他們 – Multifarious 2014-09-26 14:33:26

回答

1

data.table一個解決方案,就是短,速度快,可讀性:

library(data.table) 
cw <- data.table(ChickWeight) 
cw[, pct_mw_diet:=weight/mean(weight, na.rm=T), by=Diet] 

現在你有一個飲食