当left_join()在R中的时间戳数据帧中时,不需要的输出

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

我无法理解为什么我的代码提供了不需要的输出,因为我过去曾尝试使用类似的数据集和良好的结果。

以下是我想要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

我还可以上传dput()datagps的小型datasensorraw样本。

我正在学习R所以我想知道我做错了什么。我不应该在这些列下得到NAs,你可以在提供的dput()样本上看到。任何输入都表示赞赏!

r left-join
1个回答
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。如果您在离开加入之前格式化列,则可以检查是否存在常见ID,其中包含%datagps$Date & Time [Local]中的datasensorraw$TimeGroup%。

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