来自 adehabitatLT::as.ltraj() 的错误,因为日期不是 POSIXct 类,但 str(dates) 指示它们是 POSIXct

问题描述 投票:0回答:1

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")
r posixct adehabitathr
1个回答
0
投票

你的

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$id == "17",],
           as.ltraj(xy = xy, date = date, id = "17"))

如果您要对

id
中的多个
elk
(甚至全部)执行此一次调用并希望自动化,您可以使用以下命令生成一个列表列(保存以供以后使用):像这样的东西:

elk_with_tr <- elk %>%
  filter(id %in% c("17", ...)) %>%        # some other IDs of interest to you
  mutate(
    tr = Map(as.ltraj, xy=xy, date=date, id=id)
  )

这个新框架将有一个名为

list
tr
列,其中包含所有结果。

© www.soinside.com 2019 - 2024. All rights reserved.