调用adehabitatLT::as.ltraj()报错:已转POSIXct仍提示日期类型不符
问题:adehabitatLT::as.ltraj() 日期参数类型错误
我使用adehabitatLT::as.ltraj()函数计算动物轨迹,该函数要求日期参数为POSIXct类。按照帮助文档示例步骤,我将日期时间转换为POSIXct类,但调用函数时仍出现以下错误:
错误信息:adehabitatLT::as.ltraj(xy = xy[id == "17", ], date = date[id
== : 对于II型对象,date应为"POSIXct"类
我的操作代码如下:
library(tidyverse) library(lubridate) library(rio) library(sp) library(adehabitatLT) #import elk collar data data<-import("https://www.sciencebase.gov/catalog/file/get/59d90ceee4b05fe04cc9b0f2?f=__disk__a8%2F84%2Fa6%2Fa884a68596e8ed85b6b956119db0f1fffc4e960c") glimpse(data) #following example: convert date-time to posixct, and ID to character elk<-data%>%mutate(date=as.POSIXct(strptime(Date_Time_MST,"%m/%d/%Y",tz="US/Mountain")))%>%mutate(AID=as.character(AID)) #get id vector id<-elk%>%dplyr::select(AID) #get xy data xy<-elk%>%dplyr::select(Easting, Northing)%>%coordinates()%>%as.data.frame() #get dates date<-elk%>%dplyr::select(date)%>%as.data.frame() str(date) #get trajectories for AID 17 tr<-adehabitatLT::as.ltraj(xy=xy[id=="17",],date=date[id=="17"], id="17")
问题原因
你将日期列成功转换为POSIXct类型后,又用as.data.frame()把它包装成了数据框;同时id变量也是数据框类型。但as.ltraj()要求date参数是POSIXct类型的向量,id用于筛选时也需要是向量,而非数据框。
修正方案
直接提取date和id的列向量,不要转成数据框,调整后的代码如下:
library(tidyverse) library(lubridate) library(rio) library(sp) library(adehabitatLT) # 导入麋鹿项圈数据 data <- import("https://www.sciencebase.gov/catalog/file/get/59d90ceee4b05fe04cc9b0f2?f=__disk__a8%2F84%2Fa6%2Fa884a68596e8ed85b6b956119db0f1fffc4e960c") glimpse(data) # 转换日期时间为POSIXct,ID转为字符型 elk <- data %>% mutate(date = as.POSIXct(strptime(Date_Time_MST, "%m/%d/%Y", tz = "US/Mountain")), AID = as.character(AID)) # 提取向量而非数据框 id <- elk$AID xy <- elk %>% select(Easting, Northing) %>% coordinates() %>% as.data.frame() date <- elk$date # 直接提取POSIXct向量 # 生成AID 17的轨迹 tr <- adehabitatLT::as.ltraj(xy = xy[id == "17", ], date = date[id == "17"], id = "17")
内容的提问来源于stack exchange,提问作者Kevin
相关产品推荐
相关产品推荐

