我需要加入 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)