作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
如何使用列的前缀(不同长度)作为键来执行连接/合并?我正在尝试翻译以下 SQL 代码:
SELECT a.person_id, a.tn_code, b.list_id
FROM tblA a
INNER JOIN tblB b
ON tn_code LIKE TnCode + "%"
未决
person_id tn_code
1 C18.4
2 M8820/9
3 X20.
...
结语
ListID TnCode
1.01 A0.1
1.01 A0.2
...
我有想法比如准备一个新的key TnCode_prefix = gsub("^(.*)\\.(.*)$", "\\1", TnCode)
然后加入在新列上,或使用 data.table
的滚动连接,但它们只是近似翻译? R 中有完全等价的东西吗?
我知道使用 sqldf
并将原始 SQL 语句简单地传递给 sqldf
,但我想知道是否还有其他方法。
最佳答案
动态创建前缀并加入该前缀怎么样?我使用 dplyr
创建前缀并进行连接。
library(dplyr)
# Fake Data
set.seed(1093)
tblA = data.frame(person_id=sample(1:10, 50, replace=TRUE),
tn_code = paste0(sample(paste0(paste0(rep(LETTERS[1:3],3),c(40:42,401:403,421:423))), 50, replace=TRUE),
".", sample(160:170, 50, replace=TRUE)))
tblB = data.frame(ListID=paste0(sample(1:10, 50, replace=TRUE),".",
sample(10:20, 50, replace=TRUE)),
TnCode = paste0(sample(paste0(paste0(rep(LETTERS[1:3],3),c(40:42,401:403,421:423))), 50, replace=TRUE),
".", sample(160:170, 50, replace=TRUE)))
# Join on first letter of tn_code and TnCode
newTbl = tblA %>% mutate(join_prefix=gsub("(.*)\\..*", "\\1", tn_code)) %>%
left_join(tblB %>% mutate(join_prefix=gsub("(.*)\\..*", "\\1", TnCode)),
by="join_prefix")
关于sql - 通过前缀连接,类似于 SQL 的 ON ... LIKE,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34193567/
我是一名优秀的程序员,十分优秀!