使用 left_join 合并两个数据帧

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

使用 left_join 合并两个数据帧 x 和 y,但 y 中非合并变量的元素在合并文件中显示为 NA。

  1. 检查合并变量 namedob 是否属于同一类。 dob.xdob.y 不是。相信这是问题的根源,dob.y从“POSIXct”更改为“Date”以匹配dob.x

  2. 在两个数据框中修剪名称

  3. 合并数据帧 y 中非合并变量的返回 NA。

  4. 下面的 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"))
r date left-join
1个回答
0
投票

连接问题可能与用于创建

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"
© www.soinside.com 2019 - 2024. All rights reserved.