忽略 dplyr 连接中的大小写敏感性
Posted
技术标签:
【中文标题】忽略 dplyr 连接中的大小写敏感性【英文标题】:Ignoring case sensitvity in dplyr joins 【发布时间】:2016-09-17 07:11:36 【问题描述】:有没有办法在使用 dplyr 进行连接时忽略大小写?左、内、满?
我看到它适用于 select 但这对我来说通常是一个巨大的痛苦。我知道我可以事先将列转换为上或下,但这将是一个有用的解决方法。
【问题讨论】:
能否举个例子。这是你的意思吗? gist.github.com/jimhester/a060323a05b40c6ada34 也许检查一下fuzzyjoin包?它是 dplyr 连接的一种变体,其中的一些功能似乎与此相关。 【参考方案1】:我认为没有一种直接的方法可以先使用tolower
或toupper
整理数据。也就是说,如果愿意,内联 mutate
(在联接内)将保持原始数据不变。
X %>% left_join(Y %>% mutate(id = tolower(id)), by = "id")
它有效,但我们不妨先创建一个带有 id 的整洁 Y 来匹配 X(在我看来)。
【讨论】:
我可能会做类似...%>% setNames(., tolower(names(.))) %>% ...
之类的操作来获取所有列,而不是弄乱各个列【参考方案2】:
dplyr
还没有这样的选项,但是使用fuzzyjoin
你可以很容易地做到这一点:
require(fuzzyjoin)
regex_inner_join(x,y,by="id", ignore_case =TRUE)
如果你在 x 和 y 中有不同的列名:
regex_inner_join(x,y,by=c("xid"="yid"), ignore_case =TRUE)
【讨论】:
第一个连接中有两个右括号和一个左括号。以上是关于忽略 dplyr 连接中的大小写敏感性的主要内容,如果未能解决你的问题,请参考以下文章
linux大小写敏感和windows大小写不敏感(忽略大小写)导致的直接拷贝文件文件名冲突问题(需要打tar包再分享)