当在R中的left_join()时间戳数据帧时不期望的输出

时间:2019-03-28 14:02:30

标签: r left-join

我不明白为什么我的代码为什么提供了不需要的输出,因为我过去曾尝试使用类似的数据集并获得良好的结果。

下面是我要left_join()制作的两个数据框:

> head(datagps)
   Date & Time [Local]  Latitude Longitude            DateTime   meters
1:    06/11/2018 08:44 -2.434986  34.85387 2018-11-06 08:44:00 1.920190
2:    06/11/2018 08:48 -2.434993  34.85386 2018-11-06 08:48:00 3.543173
3:    06/11/2018 08:52 -2.435014  34.85388 2018-11-06 08:52:00 1.002979
4:    06/11/2018 08:56 -2.435011  34.85389 2018-11-06 08:56:00 3.788024
5:    06/11/2018 09:00 -2.434986  34.85387 2018-11-06 09:00:00 1.262584
6:    06/11/2018 09:04 -2.434994  34.85386 2018-11-06 09:04:00 3.012679
> head(datasensorraw)
# A tibble: 6 x 4
  TimeGroup               x     y     z
  <dttm>              <int> <int> <dbl>
1 2000-01-01 00:04:00     0     0   0  
2 2000-01-01 00:08:00     1     0   1  
3 2000-01-01 00:12:00     0     0   0  
4 2000-01-01 00:20:00     0     0   0  
5 2000-01-01 00:24:00     0     0   0  
6 2018-06-09 05:04:00     4    14  14.6

下面是我的代码。没有Errors,但是由于某种原因,我得到NAxy下的z。这不应该发生,因为datasensorraw数据框中有这些时间戳的注册值:

> library(dplyr)
> dataresults<-datagps %>% 
+   mutate(`Date & Time [Local]` = as.POSIXct(`Date & Time [Local]`, 
+                                             format = "%d/%m/%Y %H:%M")) %>%
+   left_join(datasensorraw, by = c("Date & Time [Local]" = "TimeGroup"))
> #Left join the data frames
> head(dataresults)
  Date & Time [Local]  Latitude Longitude            DateTime   meters  x  y  z
1 2018-11-06 07:44:00 -2.434986  34.85387 2018-11-06 08:44:00 1.920190 NA NA NA
2 2018-11-06 07:48:00 -2.434993  34.85386 2018-11-06 08:48:00 3.543173 NA NA NA
3 2018-11-06 07:52:00 -2.435014  34.85388 2018-11-06 08:52:00 1.002979 NA NA NA
4 2018-11-06 07:56:00 -2.435011  34.85389 2018-11-06 08:56:00 3.788024 NA NA NA
5 2018-11-06 08:00:00 -2.434986  34.85387 2018-11-06 09:00:00 1.262584 NA NA NA
6 2018-11-06 08:04:00 -2.434994  34.85386 2018-11-06 09:04:00 3.012679 NA NA NA

我还可以上传datagpsdatasensorraw的小型dput()示例。

我正在学习R,所以我想知道我做错了什么。正如您在提供的NA示例中看到的那样,我不应该在这些列下找到dput()。任何输入表示赞赏!

1 个答案:

答案 0 :(得分:0)

看起来像您的日期格式上的混淆。尝试在其他数据集中将format = "%d/%m/%Y %H:%M"切换为format = "%m/%d/%Y %H:%M"或将其切换为d / m / y。

dataresults<- datagps_sample %>% 
  mutate(`Date & Time [Local]` = as.POSIXct(`Date & Time [Local]`, format = "%m/%d/%Y %H:%M")) %>%
  left_join(datasensorraw_sample, by = c("Date & Time [Local]" = "TimeGroup"))

> head(dataresults)

  Date & Time [Local]  Latitude Longitude            DateTime   meters   x   y         z
1 2018-06-11 12:44:00 -2.434986  34.85387 2018-11-06 08:44:00 1.920190  17  12  21.59363
2 2018-06-11 12:48:00 -2.434993  34.85386 2018-11-06 08:48:00 3.543173   6   0   6.00000
3 2018-06-11 12:52:00 -2.435014  34.85388 2018-11-06 08:52:00 1.002979  47  25  53.24351
4 2018-06-11 12:56:00 -2.435011  34.85389 2018-11-06 08:56:00 3.788024   0   0   0.00000
5 2018-06-11 13:00:00 -2.434986  34.85387 2018-11-06 09:00:00 1.262584  48  53  72.23108
6 2018-06-11 13:04:00 -2.434994  34.85386 2018-11-06 09:04:00 3.012679 139 113 179.24589

编辑:基本上,left_join找不到任何匹配项,它从原始数据帧返回行,但新列为NA。如果在离开联接之前格式化列,则可以检查是否存在诸如datagps$Date & Time [Local]%in%datasensorraw$TimeGroup之类的通用ID。