Для начала я биолог, который отслеживает движения и поведение морских птиц.К этим морским птицам я прилагаю два отдельных биолога, которые собирают данные одновременно.Одним из них является GPS, который записывает координаты каждые 2 минуты, другой называется регистратором глубины во времени (TDR), который записывает глубину каждую 1 секунду (когда птица ныряет за определенную глубину, событие погружения можно считать погружением в поисках пищи).Объединение этих данных поможет определить пространственно, где птицы ныряют ради еды.Таким образом, каждая отслеживаемая птица имеет пару данных GPS и TDR, которые необходимо объединить на основе их отметки времени.Однако, что могло бы облегчить жизнь, было бы обработать их с помощью цикла For или чего-то еще, поскольку я отслеживал более 20 птиц, и объединять их по одной довольно утомительно.У меня очень мало опыта написания циклов и мне нужна помощь.У кого-нибудь есть какие-либо предложения или советы?
В настоящее время я занимаюсь объединением этих двух наборов данных по одному для каждой птицы, сопоставляя временную метку на данных GPS (дата) с временной меткой на TDR.data (DateTime), который отфильтровывает данные глубины, которые не имеют соответствующих координат.
# Read in GPS and TDR files for each bird
rh01gps <- read.csv(file.choose(), sep=",", stringsAsFactors = F, strip.white = T, na.strings = c(""))
head(rh01gps)
x y date id
1 -123.0033 37.69831 6/3/2018 01:02:00 2018_01
2 -123.0033 37.69826 6/3/2018 01:04:00 2018_01
3 -123.0032 37.69821 6/3/2018 01:06:00 2018_01
4 -123.0033 37.69829 6/3/2018 01:08:00 2018_01
5 -123.0033 37.69830 6/3/2018 01:10:00 2018_01
6 -123.0033 37.69832 6/3/2018 01:12:00 2018_01
rh01tdr <- read.csv(file.choose(), sep=",", stringsAsFactors = F, strip.white = T, na.strings = c(""))
head(rh01tdr)
Date Pressure Temp Time DateTime
1 6/3/2018 -0.94 25.203 12:00:00 AM 6/3/2018 00:00:00
2 6/3/2018 -0.94 25.203 12:00:01 AM 6/3/2018 00:00:01
3 6/3/2018 -0.94 25.203 12:00:02 AM 6/3/2018 00:00:02
4 6/3/2018 -0.94 25.203 12:00:03 AM 6/3/2018 00:00:03
5 6/3/2018 -0.94 25.203 12:00:04 AM 6/3/2018 00:00:04
6 6/3/2018 -0.94 25.203 12:00:05 AM 6/3/2018 00:00:05
# Create a dataframe with dates from TDR file that match GPS datetime (many
# more data points from TDRs than GPS, need to filter out dates that won't
# have a match in the GPS file)
rh_gps_tdr <- subset(rh01tdr, DateTime %in% rh01gps$date)
# Merge newly created data
merge <- cbind(rh_gps_tdr, rh01gps$x, rh01gps$y)
# Rename longitude (rh01gps$x) and latitude (rh01gps$y) columns to "x" and "y"
colnames(merge)[colnames(merge)=="rh01gps$x"] <- "x"
colnames(merge)[colnames(merge)=="rh01gps$y"] <- "y"
# Subset data to filter out unnecessary columns
rh01_gt <- subset(merge, select = c(5, 6, 7, 2, 3))
# Combined GPS coordinates plus pressure data.
head(rh01_gt)
DateTime x y Pressure Temp
1 6/3/2018 01:02:00 -123.0033 37.69831 -0.94 24.828
2 6/3/2018 01:04:00 -123.0033 37.69826 -0.91 24.703
3 6/3/2018 01:06:00 -123.0032 37.69821 -0.94 24.625
4 6/3/2018 01:08:00 -123.0033 37.69829 -0.94 24.578
5 6/3/2018 01:10:00 -123.0033 37.69830 -0.91 24.531
6 6/3/2018 01:12:00 -123.0033 37.69832 -0.94 24.516
write.csv(rh01_gt, "RHAU01_2018_TDR&GPS.csv")
Код, который я предоставил, работает для обработки набора данных одной птицы, но я хотел бы видеть, есть лиспособ запустить это для каждой птицы в одном процессе.