- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有 20 多个不同的数据表,这些数据表由相同的编码系统(北美行业分类系统,NAICS)索引,我想将它们合并到一个表中。
问题是每个表中都有不同级别的详细信息,当我加入时,我想通过失败编码系统的层次结构直到找到匹配来找到最佳匹配。
常规 left_join
将不起作用,因为并不总是完全匹配。我已经查看了 fuzzyjoin
包,但有点难以理解。
我想从代码表开始:
t_master
# A tibble: 360 x 1
NAICS17
<chr>
1 311111
2 311119
3 311211
4 311212
5 311213
6 311221
7 311224
8 311225
9 311230
10 311313
# ... with 350 more rows
t_master <- structure(list(NAICS17 = c(311111L, 311119L, 311211L, 311212L,
311213L, 311221L, 311224L, 311225L, 311230L, 311313L)), row.names = c(NA,
-10L), class = "data.frame")
然后循环遍历所有其他表,在每个表中找到最佳匹配,然后连接所有变量。有时这很简单,因为存在完全匹配(来自 t_asm 的 311111 和 311119 将连接到 t_master 中的 311111 和 311119):
t_asm
# A tibble: 8,167 x 3
NAICS17 CEXBLD CEXMCH
<chr> <chr> <chr>
1 31-33 16806796 96986337
2 311 2099542 9063451
3 3111 92429 517196
4 31111 92429 517196
5 311111 49756 225494
6 311119 42673 291702
7 3112 192911 1016770
8 31121 75310 267693
9 31121M 75310 267693
10 31122 94339 546407
# ... with 8,157 more rows
t_asm <- structure(list(NAICS17 = c("31-33", "311", "3111", "31111", "311111",
"311119", "3112", "31121", "31121M", "31122"), CEXBLD = c("16806796",
"2099542", "92429", "92429", "49756", "42673", "192911", "75310",
"75310", "94339"), CEXMCH = c("96986337", "9063451", "517196",
"517196", "225494", "291702", "1016770", "267693", "267693",
"546407")), row.names = c(NA, -10L), class = c("tbl_df", "tbl",
"data.frame"))
但有时我希望它寻找最佳匹配,即使它不太详细(来自 t_brdis_2015 的 311 将加入 t_master 中的 311111 和 311119)
t_brdis_2015
# A tibble: 90 x 3
NAICS17 rdcost_total rdcost_wage
<chr> <chr> <chr>
1 0 355821 204170
2 31 236132 129375
3 32 236132 129375
4 33 236132 129375
5 311 4838 2945
6 312 1002 532
7 313 748 481
8 314 748 481
9 315 748 481
10 316 748 481
# ... with 80 more rows
t_brdis_2015 <- structure(list(NAICS17 = c("0", "31", "32", "33", "311", "312",
"313", "314", "315", "316"), rdcost_total = c("355821", "236132",
"236132", "236132", "4838", "1002", "748", "748", "748", "748"
), rdcost_wage = c("204170", "129375", "129375", "129375", "2945",
"532", "481", "481", "481", "481")), class = c("tbl_df", "tbl",
"data.frame"), row.names = c(NA, -10L))
这将是一个左连接,我希望 t_master 的所有观察结果与来自其他数据表的一个观察结果连接起来。
故障回复的方法是(以311111为例):
谢谢,如果有任何不清楚的地方,请告诉我。
最佳答案
我会执行一系列更新连接:
library(data.table)
ncs = seq_len(max(nchar(t_master$NAICS17)))
nms = copy(names(t_asm))
xnms = sprintf("x.%s", nms)
tnms = replace(nms, nms == "NAICS17", "m")
t_asm2 <- data.table(t_asm)
out = data.table(t_master)
out[, NAICS17 := as.character(NAICS17)]
out[, m := NA_character_]
for (nc in rev(ncs)){
out[is.na(m), target := substr(NAICS17, 1, nc)]
out[is.na(m),
(tnms) := t_asm2[.SD, on=.(NAICS17 = target), mget(xnms)][]
]
if (!anyNA(out$m)) break
}
out[, target := NULL][]
NAICS17 m CEXBLD CEXMCH
1: 311111 311111 49756 225494
2: 311119 311119 42673 291702
3: 311211 31121 75310 267693
4: 311212 31121 75310 267693
5: 311213 31121 75310 267693
6: 311221 31122 94339 546407
7: 311224 31122 94339 546407
8: 311225 31122 94339 546407
9: 311230 3112 192911 1016770
10: 311313 311 2099542 9063451
m
是匹配的值; target
是我们在循环的当前迭代中尝试匹配的值。迭代向后进行,从最长的代码开始。 (查看正在迭代的 rev(ncs)
。)
通过过滤到 is.na(m)
,我们将跳过在早期迭代中匹配的行。如果每一行都匹配,测试 anyNA(out$m)
允许我们提前退出。
copy
只是一种避免 Why does data.table update names(DT) by reference, even if I assign to another variable? 中提到的问题的措施。
关于R 函数在 left_join 中进行故障回复?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55538354/
我喜欢 smartcase,也喜欢 * 和 # 搜索命令。但我更希望 * 和 # 搜索命令区分大小写,而/和 ?搜索命令遵循 smartcase 启发式。 是否有隐藏在某个地方我还没有找到的设置?我宁
关闭。这个问题是off-topic .它目前不接受答案。 想改进这个问题? Update the question所以它是on-topic对于堆栈溢出。 10年前关闭。 Improve this qu
从以下网站,我找到了执行java AD身份验证的代码。 http://java2db.com/jndi-ldap-programming/solution-to-sslhandshakeexcepti
似乎 melt 会使用 id 列和堆叠的测量变量 reshape 您的数据框,然后通过转换让您执行聚合。 ddply,从 plyr 包看起来非常相似..你给它一个数据框,几个用于分组的列变量和一个聚合
我的问题是关于 memcached。 Facebook 使用 memcached 作为其结构化数据的缓存,以减少用户的延迟。他们在 Linux 上使用 UDP 优化了 memcached 的性能。 h
在 Camel route ,我正在使用 exec 组件通过 grep 进行 curl ,但使用 ${HOSTNAME} 的 grep 无法正常工作,下面是我的 Camel 路线。请在这方面寻求帮助。
我正在尝试执行相当复杂的查询,在其中我可以排除与特定条件集匹配的项目。这是一个 super 简化的模型来解释我的困境: class Thing(models.Model) user = mod
我正在尝试执行相当复杂的查询,我可以在其中排除符合特定条件集的项目。这里有一个 super 简化的模型来解释我的困境: class Thing(models.Model) user = mod
我发现了很多嵌入/内容项目的旧方法,并且我遵循了在这里找到的最新方法(我假设):https://blog.angular-university.io/angular-ng-content/ 我正在尝试
我正在寻找如何使用 fastify-nextjs 启动 fastify-cli 的建议 我曾尝试将代码简单地添加到建议的位置,但它不起作用。 'use strict' const path = req
我正在尝试将振幅 js 与 React 和 Gatsby 集成。做 gatsby developer 时一切看起来都不错,因为它发生在浏览器中,但是当我尝试 gatsby build 时,我收到以下错
我试图避免过度执行空值检查,但同时我想在需要使代码健壮的时候进行空值检查。但有时我觉得它开始变得如此防御,因为我没有实现 API。然后我避免了一些空检查,但是当我开始单元测试时,它开始总是等待运行时异
尝试进行包含一些 NOT 的 Kibana 搜索,但获得包含 NOT 的结果,因此猜测我的语法不正确: "chocolate" AND "milk" AND NOT "cow" AND NOT "tr
我正在使用开源代码共享包在 iOS 中进行 facebook 集成,但收到错误“FT_Load_Glyph failed: glyph 65535: error 6”。我在另一台 mac 机器上尝试了
我正在尝试估计一个标准的 tobit 模型,该模型被审查为零。 变量是 因变量 : 幸福 自变量 : 城市(芝加哥,纽约), 性别(男,女), 就业(0=失业,1=就业), 工作类型(失业,蓝色,白色
我有一个像这样的项目布局 样本/ 一种/ 源/ 主要的/ java / java 资源/ .jpg 乙/ 源/ 主要的/ java / B.java 资源/ B.jpg 构建.gradle 设置.gr
如何循环遍历数组中的多个属性以及如何使用map函数将数组中的多个属性显示到网页 import React, { Component } from 'react'; import './App.css'
我有一个 JavaScript 函数,它进行 AJAX 调用以返回一些数据,该调用是在选择列表更改事件上触发的。 我尝试了多种方法来在等待时显示加载程序,因为它当前暂停了选择列表,从客户的 Angul
可能以前问过,但找不到。 我正在用以下形式写很多语句: if (bar.getFoo() != null) { this.foo = bar.getFoo(); } 我想到了三元运算符,但我认
我有一个表单,在将其发送到 PHP 之前我正在执行一些验证 JavaScript,验证后的 JavaScript 函数会发布用户在 中输入的文本。页面底部的标签;然而,此消息显示短暂,然后消失...
我是一名优秀的程序员,十分优秀!