我不明白为什么我的代码为什么提供了不需要的输出,因为我过去曾尝试使用类似的数据集并获得良好的结果。
下面是我要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
,但是由于某种原因,我得到NA
,x
和y
下的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
我还可以上传datagps
和datasensorraw
的小型dput()
示例。
我正在学习R,所以我想知道我做错了什么。正如您在提供的NA
示例中看到的那样,我不应该在这些列下找到dput()
。任何输入表示赞赏!
答案 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。