我在创建代码以从每个嵌套有多个行的原始数据帧计算嵌套初始化日期方面遇到麻烦。我的数据集看起来像这样:
NestID JulianDate Stage HostEggs HostYoung NSTLAge NestFate
Nest01 146 IB 2 0 NA
Nest01 149 NG 0 2 1
Nest01 153 NG 0 2 5
Nest01 156 NG 0 2 8
Nest01 160 FL 0 0 NA Fledged
Nest02 143 NG 1 1 5
Nest02 147 D 0 0 NA Depredated
我想做的是计算满足某些条件的嵌套类型的启动日期。对于Nest01,我想使用阶段IB的最后一天到阶段NG的第一天之间的中点,然后从中减去12天(潜伏期。因此,在此示例中,中点是147.5和之前的12天起始日期为135.5。
对于在雏鸟期发现的鸟巢,我想根据NSTLAge计算启动日期。对于Nest02,我需要从儒略日减去年龄,并在潜伏期减去12天。因此,Nest02的启动日期应为126(143-5-12)。
我不确定如何执行此操作。我已经使用dplyr对NestID进行分组,但是此后我不确定如何为每个分类下的嵌套编码。我也尝试过设置if语句,但是从网上发现的内容来看,它分别查看每一行,我需要它查看整个组。
人们能提供的任何帮助将不胜感激。
答案 0 :(得分:0)
我没有使用dplyr,但是我认为这可以解决问题。
NestID <- c(rep("Nest01",5),rep("Nest02",2))
JulianDate <- c(146,149,153,156,160,143,147)
Stage <- c("IB","NG","NG","NG","FL","NG","D")
HostEggs <- c(2,0,0,0,0,1,0)
HostYoung <- c(0,2,2,2,0,1,0)
NSTLAge <- c(NA,1,5,8,NA,5,NA)
NestFate <- c(rep(" ",4),"Fledged"," ","Depredated")
data <- data.frame(NestID,JulianDate,Stage,HostEggs,HostYoung,NSTLAge,NestFate)
InitiationDate <- c()
nests <- names(table(NestID)) #I got the names of the nests
for(i in 1:length(nests)){
p <- min(which(data$NestID==nests[i])) #This is to see the position where the i nest beggings
if(data$Stage[p]=="IB"){
a <- max(which(data$Stage[which(data$NestID==nests[i])]=="IB"))
b <- min(which(data$Stage[which(data$NestID==nests[i])]=="NG"))
InitiationDate[i] <- mean(data$JulianDate[c(a,b)]) - 12
} else if(data$Stage[p]=="NG"){
InitiationDate[i] <- data$JulianDate[p] - data$NSTLAge[p] - 12
}
}
names(InitiationDate) <- nests; InitiationDate