У меня есть фрейм данных, содержащий данные выборки популяции рыб. Я хотел бы создать контейнеры для подсчета количества рыбы в данной группе длины для каждого вида.
Приведенный ниже код выполняет эту задачу для 2 видов. Выполнение этого для всех видов в фрейме данных не кажется самым элегантным способом достижения этой цели.
Плюс я хотел бы применить этот код для других озер с различными видами. Было бы здорово найти «автоматизированный» способ применения этих бинов к каждой группе видов в фрейме данных.
Фрейм данных выглядит следующим образом:
Species TL WT
BLG 75 6
BLG 118 27
LMB 200 98
LMB 315 369
RBS 112 23
RES 165 73
SPB 376 725
YEP 155 33
ss = read.csv("SS_West Point.csv" , na.strings="." , header=T)
blg = ss %>% subset(Species == "BLG")
lmb = ss %>% subset(Species == "LMB")
blgn = blg %>% summarise(n = n())
lmbn = lmb %>% summarise(n = n())
### 20mm Length Groups - BLG ###
blg20 = blg %>% group_by(gr=cut(TL , breaks = seq(0 , 1000 , by = 20))) %>%
summarise(n = n()) %>% mutate(freq = n , percent = ((n/blgn$n)*100) ,
cumfreq = cumsum(freq) , cumpercent = cumsum(percent))
### 20mm Length Groups - BLG ###
lmb20 = lmb %>% group_by(gr=cut(TL , breaks = seq(0 , 1000 , by = 20))) %>%
summarise(n = n()) %>% mutate(freq = n , percent = ((n/lmbn$n)*100) ,
cumfreq = cumsum(freq) , cumpercent = cumsum(percent))
Я успешно использовал do () для запуска линейных моделей в этом фрейме данных, но не могу заставить его работать с cut (). Вот как я использовал do () для lm ():
ssl = ss %>% mutate(lTL = log10(TL) , lWT = log10(WT)) %>% group_by(Species)
m = ssl %>% do(lm(lWT~lTL , data =.)) %>% mutate(wp = 10^(.fitted))