使用 left_join 合并两个数据帧 x 和 y,但 y 中非合并变量的元素在合并文件中显示为 NA。
检查合并变量 name 和 dob 是否属于同一类。 dob.x 和 dob.y 不是。相信这是问题的根源,dob.y从“POSIXct”更改为“Date”以匹配dob.x
在两个数据框中修剪名称
合并数据帧 y 中非合并变量的返回 NA。
下面的 MRE 捕获了我想要完成的任务(tel 并不纯粹由 NA 组成)。
library(dplyr)
# dataframe x
x <- data.frame(name=c("A","B","C","D"), dob=as.Date(c("56-12-11","79-10-03","87-05-25","94-01-28"), format="%y-%m-%d"), loc= c("DD","FG","XV","HJ"))
# dataframe y
y <- data.frame(name=c("A","C"), dob=as.POSIXct(c("56-12-11","87-05-25"),format="%y-%m-%d"), tel= c("1111155555", "2222266666"))
# convert dates in y from POSIXct to Date class
y <- y
y[] <- lapply(y, function(x){
if(inherits(x,"POSIXct")) as.Date(x) else x
})
# merge x and y by name and date of birth
z <- left_join(x,y,by=c("name","dob"))
连接问题可能与用于创建
POSIXct
时间列以及随后转换回日期对象的默认时区有关。例如:
as.Date(as.POSIXct(c("56-12-11","87-05-25"),format="%y-%m-%d",tz="Australia/Sydney"))
[1] "2056-12-10" "1987-05-24"
更改为较晚的时区可以得到预期的结果。
as.Date(as.POSIXct(c("56-12-11","87-05-25"),format="%y-%m-%d",tz="America/Montreal"))
[1] "2056-12-11" "1987-05-25"