我想使用sqldf包连接两个数据帧。用sqldf连接两个数据帧导致NA列
这些是我的两个dataframes的再现的例子:
a <- c(1,2,3,4,5)
b <- c(1,2,3,4,5)
c <- c(1,2,3,4,5)
d <- c(1,2,3,4,5)
e <- c(1,2,3,4,5)
dataframe1 <- data.frame(a,b,c,d,e)
a <- c(NA,NA,NA,NA,5)
b <- c(NA,NA,NA,4,NA)
c <- c(NA,NA,3,NA,NA)
d <- c(NA,2,NA,NA,NA)
e <- c(1,NA,NA,NA,NA)
f <- c(1,2,3,4,5)
dataframe2 <- data.frame(a,b,c,d,e,f)
这是对dataframes联接可再现例如:
final_data <- sqldf("SELECT *
FROM dataframe1
LEFT OUTER JOIN dataframe2 USING(a,b,c,d,e)")
其经由引入final_data的产生的F列加入充满了新生。为什么?理想的f列将具有dataframe2中存在的a,b,c,d和e的相应值。我怎么能解决这个问题?
这两个数据框之间没有匹配的行,所以结果是'dataframe1',新'f'列中的值全部为NULL(SQL中为NULL,R中为NA)。如果你需要'f'列中的值,你至少需要一行数据帧之间的所有'a,b,c,d,e'匹配。 – Gregor
有没有办法在我的连接中排除NAs,并且只在dataframe2的每一行中插入对应于共享值的值? R中的merge()函数使用参数“incompatibles = NA”来实现,但这只适用于加入一列并且我加入5. – jgozal
也许我可以在我的连接中指定加入公共列(a或b或c或d或e),以便它只在与其中一个值匹配时才加入。我怎么能把它在SQL? – jgozal