2016-12-04 32 views
0

HeJ小鼠HEJ增長率新列,計算與基於兩個因素而不分裂數據幀

我想計算生長速率,將它們存儲在我的數據幀的一個新的列例如命名爲growth.per.day。我一如既往地尋找一種不包含數百行和數百行手動編輯代碼的方式。

我有六個級別的藻類和25級營養素。
這意味着我有150個「小組」,我想要計算費率。這些子集的長度根據個體藻類而不同。

所以,基本上:

藻類A - >

養分(1) - > C.mikro.gr.L(第2天) - C.mikro.gr.L(第1天), C.mikro.gr.L(第3天) - C.mikro.gr.L(第2天)...; (2) - > C.mikro.gr.L(第2天) - C.mikro.gr.L(第1天),C.mikro.gr.L(第3天) - C.mikro。(第2天) - C.mikro.gr.L(第1天),C.mikro.g.L(第3天) gr.L(第2天)...等等

我已經由藻類

X <- split(data, data$ALGAE) 
names(X) <- c("ANKI", "CHLAMY", "MIX_A", "MIX_B", "SCENE", "STAURA") 
list2env(X, envir = .GlobalEnv) 

分割數據幀,我也有分裂那些再次,產生上述的可愛150點的子集。然後,我申請

ratio1$growth.per.day <- c(NA,ratio1[2:nrow(ratio1), 16] - ratio1[1:(nrow(ratio1)-1), 16]) 

這是完美的,我想要做什麼,但我真的非常感激,而不屠殺我的數據幀短,更優雅的方式。

'data.frame': 3550 obs. of 16 variables: 
$ SAMPLE.ID : Factor w/ 150 levels "1","2","3","4",..: 1 2 3 4 5 6 7 8 9 10 ... 
$ COMMUNITY : chr "com.1" "com.1" "com.1" "com.1" ... 
$ NUTRIENT : Factor w/ 25 levels "1","2","3","4",..: 1 2 3 4 5 6 7 8 9 10 ... 
$ RATIO  : Factor w/ 23 levels "3.2","4","5.4",..: 11 9 6 4 1 14 10 8 5 2 ... 
$ PHOS  : Factor w/ 5 levels "0.09","0.195",..: 5 5 5 5 5 4 4 4 4 4 ... 
$ NIT   : Factor w/ 5 levels "1.5482","3.0964",..: 5 4 3 2 1 5 4 3 2 1 ... 
$ DATUM  : Factor w/ 35 levels "30.08.16","31.08.16",..: 1 1 1 1 1 1 1 1 1 1 ... 
$ DAY   : int 0 0 0 0 0 0 0 0 0 0 ... 
$ TYPE  : chr "mono" "mono" "mono" "mono" ... 
$ ALGAE  : Factor w/ 6 levels "ANK","CHLA","MIX A",..: 5 5 5 5 5 5 5 5 5 5 ... 
$ MEAN  : num 864 868 882 873 872 ... 
$ GROW  : num 0.00116 0.00115 0.00113 0.00115 0.00115 ... 
$ FLUORO  : num NA NA NA NA NA NA NA NA NA NA ... 
$ MEAN.MQ  : num 0.964 0.969 0.985 0.975 0.973 ... 
$ GROW.MQ  : num 1.04 1.03 1.02 1.03 1.03 ... 
$ C.mikro.gr.L: num -764 -913 -1394 -1085 -1039 ... 

我希望這充分說明了問題,

非常感謝!

回答

0

希望這是你的要求爲:

df = data.frame(algae = sort(rep(LETTERS[1:6], 20)), 
       nutrient = rep(letters[22:26], 24), 
       day = rep(c(rep(1, 5), 
         rep(2, 5), 
         rep(3, 5), 
         rep(4, 5)), 6), 
       growth = runif(120, 30, 60)) 

library(dplyr) 

df = df %>% group_by(algae, nutrient) %>% mutate(rate = c(NA, diff(growth, lag = 1))) 

而且那裏藻生產和營養訴表:

algae nutrient day growth  rate 
    <fctr> <fctr> <dbl> <dbl>  <dbl> 
1  A  v  1 48.68547  NA 
2  A  v  2 55.63570 6.950232 
3  A  v  3 53.28569 -2.350013 
4  A  v  4 44.83022 -8.455465 
+0

這是驚人的:)謝謝你這麼多!它可能不是很多,但我覺得它非常酷 –

+0

那麼,你可以upvote它,如果你喜歡:) –

+0

我不能,我很抱歉,我已經嘗試過,但我的名聲太低了。 –