R语言转换时间戳为POSIXct返回double及as.ltraj报错咨询
出错原因
- POSIXct类型的底层存储逻辑就是双精度浮点数,因此用
typeof()查询返回double是正常现象,判断时间列是否转换成功应该用class(martin_df$timestamp),只要返回结果包含POSIXct即代表时间类型转换正确。你当前代码里存在时区拼写错误,将正确的标准时区GMT错写为GTM,部分R版本遇到无法识别的时区时,会导致时间列转换不符合预期。 - 核心报错原因是
as.ltraj()的参数传入格式错误:该函数不能直接传入整个数据框作为第一个参数,需要你手动明确指定坐标列、时间日期列、个体ID列三个必填参数,函数无法自动识别数据框中的日期列,因此抛出找不到POSIXct类型日期的错误。
解决方法
- 先修正时间转换代码的时区拼写:
martin_df$timestamp <- as.POSIXct(martin_df$timestamp, format="%Y-%m-%d %H:%M:%OS", tz="GMT")
转换完成后执行class(martin_df$timestamp)验证,返回结果包含POSIXct即为转换成功。
- 按照
as.ltraj()的要求传入参数,替换示例代码中的列名为你实际数据框的对应列名即可:
# 假设数据框中x坐标列名为lon,y坐标列名为lat,个体id列名为animal_id martin.ltraj <- as.ltraj( xy = martin_df[, c("lon", "lat")], date = martin_df$timestamp, id = martin_df$animal_id, typeII = TRUE )
如果你的数据只包含单个个体,id参数也可以直接传入固定字符串,比如id = rep("martin", nrow(martin_df))。
内容的提问来源于stack exchange,提问作者dani
相关产品推荐
相关产品推荐

