提问人:Kevin 提问时间:8/29/2023 更新时间:8/29/2023 访问量:34
来自 adehabitatLT::as.ltraj() 的错误,因为日期不是类 POSIXct,但 str(dates) 表示它们是 POSIXct
Error from adehabitatLT::as.ltraj() because dates are not class POSIXct but str(dates) indicates they are POSIXct
问:
adehabitatLR::as.ltraj() 函数计算动物的轨迹。该函数要求日期为类 POSIXct。我使用我在网上找到的播放数据集,在帮助文档的示例部分中执行了相同的步骤,并将日期时间转换为 POSIXct 日期,但在运行该函数时仍然出现以下错误
adehabitatLT::as.ltraj(xy = xy[id == “17”, ], date = date[id == : 对于类型为 II 的对象,日期应为类 “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")
答:
1赞
r2evans
8/29/2023
#1
你的对象不是类的,它是一个 .不要将具有一列的帧(恰好是)等效的函数误认为是向量。date
POSIXct
data.frame
POSIXct
POSIXct
此外,我认为没有理由将其分解为单独的向量,这为不一致的索引等留下了空间。我建议这样:
elk <- data %>%
mutate(date = as.POSIXct(Date_Time_MST, format = "%m/%d/%Y", tz ="US/Mountain"))) %>%
mutate(AID = as.character(AID))
tr <- with(elk[elk$AID == "17",],
as.ltraj(xy = coordinates(cbind(Easting, Northing), date = date, id = AID))
如果您要对多个(甚至所有)进行一次调用,并希望将其自动化,则可以生成一个列表列(保存以供以后使用),其内容如下:id
elk
elk_with_tr <- elk %>%
filter(id %in% c("17", ...)) %>% # some other IDs of interest to you
mutate(
tr = Map(as.ltraj, xy=coordinates(cbind(Easting, Northing)), date=date, id=AID)
)
这个新框架将有一个以所有结果命名的 -列。list
tr
评论
1赞
Kevin
8/29/2023
谢谢,这很有帮助。我最终遇到了其他错误(例如,xy 在麋鹿中不存在),但最终我想我解决了它......麋鹿1<-麋鹿%>% dplyr::select(AID,Easting, Northing, date)%>% distinct()%>% nest(data=-AID)%>% mutate(traj=map2(AID,data,~as.ltraj(xy=data.frame(x=.y$Easting, y=.y$Northing),date=.y$date,id=.x)))
1赞
r2evans
8/29/2023
哎呀,对了,你是两列,我赶紧过来,做错了......为清楚起见进行编辑,对此感到抱歉......xy
上一个:创建日历年的开始日期和结束日期
评论
date
POSIXct
POSIXct
tr <- with(elk[elk$id=="17",], as.ltraj(xy=xy, date=date, id="17"))