R: результаты от агрегата с несколькими функциями, которые нельзя использовать в дальнейших вычислениях. ЗАЧЕМ?
Привет пользователям Stackoverflow,
У меня есть проблема, связанная с результатами агрегатной функции в R. Моя цель - выбрать определенные виды птиц из набора данных и рассчитать плотность наблюдаемых особей на исследуемой территории. Для этого я взял подмножество основного файла данных, затем агрегировал по области, вычисляя среднее значение и количество особей (представленных длиной вектора). Затем я хотел использовать рассчитанную среднюю площадь и количество особей для расчета плотности. Это не сработало. Код, который я использовал, приведен ниже:
> head(data)
positionmonth positionyear quadrant Species Code sum_areainkm2
1 5 2014 1 Bar-tailed Godwit 5340 155.6562
2 5 2014 1 Bar-tailed Godwit 5340 155.6562
3 5 2014 1 Bar-tailed Godwit 5340 155.6562
4 5 2014 1 Bar-tailed Godwit 5340 155.6562
5 5 2014 1 Gannet 710 155.6562
6 5 2014 1 Bar-tailed Godwit 5340 155.6562
sub.gannet<-subset(data, species == "Gannet")
sub.gannet<-data.frame(sub.gannet)
x<-sub.gannet
aggr.gannet<-aggregate(sub.gannet$sum_areainkm2, by=list(sub.gannet$positionyear, sub.gannet$positionmonth, sub.gannet$quadrant, sub.gannet$Species, sub.gannet$Code), FUN=function(x) c(observed_area=mean(x), NoInd=length(x)))
names(aggr.gannet)<-c("positionyear", "positionmonth", "quadrant", "species", "code", "x")
aggr.gannet<-data.frame(aggr.gannet)
> aggr.gannet
positionyear positionmonth quadrant species code x.observed_area x.NoInd
1 2014 5 4 Gannet 710 79.8257 10.0000
density <- c(aggr.gannet$x.NoInd/aggr.gannet$x.observed_area)
aggr.gannet <- cbind(aggr.gannet, density)
Error in data.frame(..., check.names = FALSE) :
Arguments imply differing number of rows: 1, 0
> density
numeric(0)
> aggr.gannet$x.observed_area
NULL
> aggr.gannet$x.NoInd
NULL
Похоже, что R не рассматривает результаты от функции (seen_area и NoInd) как числовые значения самостоятельно. Это было уже очевидно, когда я не мог дать им имя каждому, но должен был назвать их «х».
Может кто-нибудь, пожалуйста, скажите мне, почему это происходит. Как я могу рассчитать плотность в этих условиях? Или есть другой способ объединить несколько функций по одной и той же переменной, что приведет к полезному выводу?
Любые идеи будут с благодарностью, спасибо!