忽略 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】:

我认为没有一种直接的方法可以先使用tolowertoupper 整理数据。也就是说,如果愿意,内联 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 连接中的大小写敏感性的主要内容,如果未能解决你的问题,请参考以下文章

MYSQL如何设置大小写敏感

MYSQL如何设置大小写敏感

在 querySelectorAll 中忽略大小写敏感

linux大小写敏感和windows大小写不敏感(忽略大小写)导致的直接拷贝文件文件名冲突问题(需要打tar包再分享)

MatchEvaluator 对大小写不敏感的文本换行,除非文本位于图像 HTML 标记内(但不忽略所有标记)

mysql 解决数据库对大小写敏感的问题