我正在尝试在R包moveHMM中使用prepData函数。我收到"prepData(x, coordNames = c("lon", "lat"(的错误(:每只动物的观察必须是连续的。
x 是一个具有列名 "ID"、"long"、"lat" 的数据帧。ID列是每个动物的名称作为字符,lon/lat是数字。没有 NA 值,没有缺失的行。
我不知道这个错误是什么意思,也无法修复它。请帮忙。
x <- data.frame(dat$ID, dat$lon, dat$lat)
hmmgps <- prepData(x, coordNames=c("lon", "lat"))
函数 prepData 假定每个轨道(或每个动物(的行在数据框中分组在一起。错误消息指示情况并非如此,并且至少拆分了一个轨道。例如,以下(人工(数据集会导致此错误:
> data
ID lon lat
1 1 54.08658 12.190313
2 1 54.20608 12.101203
3 1 54.18977 12.270896
4 2 55.79217 9.943341
5 2 55.88145 9.986028
6 2 55.91742 9.887342
7 1 54.25305 12.374541
8 1 54.28061 12.190078
这是因为 ID 为">1"的轨道分为两部分,由 ID 为"2"的轨道隔开。
轨迹必须是连续的,即所有ID为"1"的观测值都应该排在第一位,然后是ID为"2"的所有观测值。一种可能的解决方案是按 ID 和日期对数据进行排序。
考虑相同的数据集,带有"日期"列:
> data
ID lon lat date
1 1 54.08658 12.190313 2019-09-06 14:20:00
2 1 54.20608 12.101203 2019-09-06 15:20:00
3 1 54.18977 12.270896 2019-09-06 16:20:00
4 2 55.79217 9.943341 2019-09-04 07:55:00
5 2 55.88145 9.986028 2019-09-04 08:55:00
6 2 55.91742 9.887342 2019-09-04 09:55:00
7 1 54.25305 12.374541 2019-09-06 17:20:00
8 1 54.28061 12.190078 2019-09-06 18:20:00
在回答该问题之后,您可以使用以下命令定义有序数据集:
> data_ordered <- data[with(data, order(ID, date)),]
> data_ordered
ID lon lat date
1 1 54.08658 12.190313 2019-09-06 14:20:00
2 1 54.20608 12.101203 2019-09-06 15:20:00
3 1 54.18977 12.270896 2019-09-06 16:20:00
7 1 54.25305 12.374541 2019-09-06 17:20:00
8 1 54.28061 12.190078 2019-09-06 18:20:00
4 2 55.79217 9.943341 2019-09-04 07:55:00
5 2 55.88145 9.986028 2019-09-04 08:55:00
6 2 55.91742 9.887342 2019-09-04 09:55:00
然后,可以将排序数据(不包括日期列(传递给 prepData:
> hmmgps <- prepData(data_ordered[,1:3], coordNames = c("lon", "lat"))
> hmmgps
ID step angle x y
1 1 16.32042 NA 54.08658 12.190313
2 1 18.85560 2.3133191 54.20608 12.101203
3 1 13.37296 -0.6347523 54.18977 12.270896
4 1 20.62507 -2.4551318 54.25305 12.374541
5 1 NA NA 54.28061 12.190078
6 2 10.86906 NA 55.79217 9.943341
7 2 11.60618 -1.6734604 55.88145 9.986028
8 2 NA NA 55.91742 9.887342
我希望这有所帮助。