Цикл данных по уникальному идентификатору и дате и запуск индивидуального анализа - время первого прохождения
В настоящее время я работаю над анализом времени первого прохода в R, где мне нужно извлечь отдельные данные из большого набора данных (>35 000 строк) и выполнить анализ по дате и уникальному идентификатору животного. Например, животное 1 имеет 3 085 строк данных за сезон. Мне нужно извлечь данные животного 1 за день 1, 2, 3 и т. Д. И выполнить анализ времени первого прохождения для каждого дня. В общей сложности мне пришлось бы выполнить этот анализ 938 раз (14 отдельных животных х 67 дней). Очевидно, должен быть более простой путь для завершения этого анализа, не проводя его так много раз. Ниже приведен код R, который мне нужно запустить для анализа времени первого прохода. Структура данных проста: уникальный идентификатор животного, дата, X и Y. Как лучше всего начать "пакетную обработку" этого анализа по уникальному идентификатору и дате?
#call up the data
animal <-read.table("animal.csv",header=T,sep=",")
#check it out
animal
#Format dates into POSIXct format
animal$Date<-as.POSIXct(animal$Date, tz="US/Central")
#Create ltraj object. Calculates summary movement statistics, and is required to pass to the FPT analysis
path <- as.ltraj(xy=animal[,c("X","Y")], date=animal$Date, id=as.character(animal$ID), typeII=TRUE)
path
summary(path[[1]])
x11()
plot(path)
path[[1]]
#Plot step length distribution
plot(density(path[[1]]$dist, na.rm=T), xlim=c(0,400))
#Plot turn angle distribution
plot(density(abs(path[[1]]$rel.angle), na.rm=T))
#Turn the summary into a new data frame
move.stats <- path[[1]]
#Start the FPT analysis. Step 1 is to create locations at evenly spaced intervals.
#interpolate positions/times at 5m intervals along the path using the redisltraj() function
path.re <- redisltraj(path,u=5,nnew=1000)
#Check it out
summary(path.re)
summary(path.re[[1]])
x11()
plot(path.re)
#FPT analysis. Analysis done for circles with radii values from 10m - 500m in 10m
animal.fpt <- fpt(path.re,radii=seq(from=10,to=500,by=10))
#Data structure
str(animal.fpt)
#Variance plot to determine scale of ARS behavior
varlogfpt(animal.fpt, graph=TRUE)
#Write to data frame to store variance for each radii
animal.var <- varlogfpt(animal.fpt, graph = FALSE)
#Plot FPT of a specific radii along the path
plot(animal.fpt, scale=40)
#Append the FPT values for circles with r=40m to the dataframe of the locations
animal.r40 <- data.frame(path.re[[1]], fpt40 = animal.fpt[[1]]$r4)
#Plot the path color-coded by ARS
plot(y~x, data=animal.r40, typ="l")
points(y~x, data=animal.r40, pch=19, col= ifelse(animal.r40$fpt >= 6000, "red", "green"),
cex=ifelse(animal.r40$fpt >= 6000, 1, 0.5))
legend("topright", col="red", pch=19, legend="ARS")