dplyr left_join函数未完成连接,看似随机的NA

时间:2018-08-16 14:16:59

标签: r join dplyr

我有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 Ac歌TL”

所有雪佛兰Malibu车型

获得NA的实例:

“ 2004 Acura 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)

2 个答案:

答案 0 :(得分:0)

尝试一下:

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

也许您在其他地方有一些讨厌的空白空间-此代码应该可以帮助您发现它。

答案 1 :(得分:0)

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

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