r语言 - dplyr left_join函数不完整的连接,看似随机的 NA



我需要加入 2 个数据帧。

一个来自汽车及其燃油经济性的EPA,另一个来自大学的停车许可证数据库。我需要协调并连接汽车年份、品牌和型号的列,我已经将它们合并为两个 df 上名为"join"的单个列。

当我向左(或向右(连接时,我会返回一个新的 df,其中包含每个停车许可证车的连接燃油经济性列。但是,大约 40% 的列在燃油经济性列中返回为 NA。有时这是由于 df 之间的差异;"awd"、"wagon"、"Hybrid"等我已经考虑过了,gsub(( 出来简化。这仍然没有考虑到所有的NA。不确定如何在不共享整个DF的情况下使这个可重现,但我将展示我的代码和示例,说明它何时有效,何时无效。

library(dplyr)
library(plyr)
epa <- as.tbl(epa) #make these df's tbl
student <- as.tbl(student)
joinedStudent <- right_join(epa, student, by = 'join')

.

这起作用的实例:

"2013年讴歌TL">

所有雪佛兰马里布车型

.

我得到 NA 的实例:

"2004年讴歌TL" 所有"吉普"车型

.

我已经确认条目,即"2004 Acura TL"与 epa df 中的条目相同,没有多余的空格等。似乎没有模式;它不是特定于年份的,也不是特定的,我能看到的唯一模式是任何年份的"吉普"车型都没有加入。

希望我错过了一些简单的东西。

编辑:结果是尾随空格,即使我在 df 视图窗格中找不到或看到任何空格。这是解决我问题的代码

#create function to remove trailing spaces
trim.trailing <- function (x) sub("\s+$", "", x)
#apply function to remove trailing spaces
epa$joined <- trim.trailing(epa$joined)

试试这个:

print(bind_rows(epa %>% distinct(join), student %>% distinct(join)) %>% arrange(join))

也许你有一些讨厌的额外空白或某处的东西 - 这段代码应该可以帮助你发现它。

@N.Bailey指出了解决方案。它与数据列中尾随的幻像空间有关;我甚至无法突出显示空间来注意到它们。

trim.trailing <- function (x) sub("\s+$", "", x) 
epa$joined <- trim.trailing(epa$joined)

最新更新