【发布时间】:2023-03-24 02:20:01
【问题描述】:
我有两个要合并的数据框(称为d1 和small)。我导出了每个数据框并使其可用here。
d1 数据帧用于生成 small 数据帧。我使用了一系列for if 循环来确定d1 数据集中每个物种(sps)的存在/不存在(在两个小时的区间内),以生成small 数据集。
我想做的是从small 中取出TRUE/FALSE 行并将它们与d1 合并以获得类似的东西(假设示例):
datetime MUVI80 MUXX80 MICRO80 TAHU80 TAST80 ERDO80 LEAM80 ONZI80 MEME80 MAMO80 sps pp datetime km crossingtype
1 2012-06-19 01:42:00 FALSE FALSE TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE MICRO 0 2012-06-19 02:19 80 Exploration
2 2012-06-21 21:42:00 FALSE TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE MUXX 1 2012-06-21 23:23 80 Unknown
3 2012-07-15 09:42:00 FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE TRUE MAMO 0 2012-07-15 11:38 80 Complete
4 2012-07-20 21:42:00 FALSE FALSE TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE MICRO 0 2012-07-20 22:19 80 Exploration
5 2012-07-29 21:42:00 FALSE FALSE TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE MICRO 0 2012-07-29 23:03 80 Exploration
6 2012-08-08 23:42:00 FALSE FALSE TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE MICRO 0 2012-08-07 02:04 80 Complete
虽然两个数据集共享一个公共字段 datetime,但它们的格式不同,这导致问题有两个原因:
-
datetime字段是small中的POSIXct对象,但不在d1中。 - 为了在
small中创建datetime字段,我还设置了 2 小时的时间段(即我问,在两小时内,物种是存在 (TRUE) 还是不存在 (FALSE))。这意味着datetime字段在small和d1数据集之间不会完全匹配。相反,d1中的datetime字段位于small中的datetime字段 2 小时内。
因此,当我尝试时:
time<-dplyr::full_join(small, d1, by = "datetime")
显然不行。
我得到的错误如下:
Error in full_join_impl(x, y, by$x, by$y, suffix$x, suffix$y, check_na_matches(na_matches)) : cannot join a POSIXct object with an object that is not a POSIXct object
有人对我的方法有什么建议吗:
- 检查不同的
datetime字段的格式,然后将它们强制转换为相同的格式。 - 合并这两个数据集(尽管
datetime字段中的小时不匹配)。
【问题讨论】:
-
你能分享这两个数据集吗?
-
请注意,将
datetime字段强制转换为相同格式的更好方法是:datetime=ymd_hm(datetime)来自lubridate包。
标签: r datetime merge dplyr time-series