sql - 基于模式重命名变量的 sqldf R 代码
问题描述
我有一个超过 50,000 行的不同名称的 csv 格式的列表,下面有相同的底层 5 位代码:
Code Name
25000 James John Junior
RA25000 James Junior
RA2500009 James J. Junior
RA27000 Bill Hope
RA2800009 Donna Scott
28000 Donna Love Scott
sqldf
由于列表共享相同的底层代码,例如 25000,我如何使用R 中的包(如下所示)更改列表以使其名称与底层代码(例如 25000)相关联。仅使用 Rstudio。
Code Name
25000 James John Junior
RA25000 James John Junior
RA2500009 James John Junior
RA27000 Bill Hope
RA2800009 Donna Love Scott
28000 Donna Love Scott
请注意,我想避免在代码中单独键入 25000、27000 和 28000,因为列表本身有超过 50,000 行,并且可能有 40,000 个基础代码变体。
解决方案
假设您的版本sqldf
支持公用表表达式(SQLite 3.8.3+),请考虑使用 and 清理代码并将SUBSTR
其REPLACE
连接到聚合 CTE 以与最大长度的名称对齐。CTE 的最终自连接需要映射干净的名称。
WITH agg AS
(SELECT SUBSTR(REPLACE([Code], 'RA', ''),1,5) AS CleanCode,
MAX(LENGTH([Name])) AS MaxLenName
FROM myData
GROUP BY SUBSTR(REPLACE([Code], 'RA', ''),1,5)
),
sub AS
(SELECT SUBSTR(REPLACE([Code], 'RA', ''),1,5) AS CleanCode,
LENGTH([Name]) AS LenName,
[Code],
[Name]
FROM myData
)
SELECT sub.Code,
sub2.Name
FROM sub
INNER JOIN agg
ON agg.CleanCode = sub.CleanCode
LEFT JOIN sub as sub2
ON agg.CleanCode = sub2.CleanCode
AND agg.MaxLenName = sub2.LenName;
Online Demo (点击顶部运行)
| Code | Name |
| --------- | ----------------- |
| 25000 | James John Junior |
| RA25000 | James John Junior |
| RA2500009 | James John Junior |
| RA27000 | Bill Hope |
| RA2800009 | Donna Love Scott |
| 28000 | Donna Love Scott |
推荐阅读
- python - 来自 API 单个请求的 DataFrame
- pytorch - RuntimeError Pytoch 无法找到有效的 cuDNN 算法来运行卷积
- tensorflow - 如何使用 3D 数据进行 K-Fold 交叉验证?(BERT 张量流应用)
- inno-setup - Inno Setup Exit Setup 页面以系统语言显示按钮,而不是设置语言
- python - 如何在 youtube-dl 提取播放列表信息时访问单个 url
- java - 为什么我在 System.setProperty(“webdriver.chrome.driver”, “C:\\Users\\cchadwell\\Desktop\\chromedriver.exe”) 上收到错误消息
- google-cloud-platform - Cloud Run:429:请求被中止,因为没有可用的实例
- python - matplotlib 中的烛台
- laravel - 如何通过 Postman 在 Laravel 中测试 Api?
- nas - 使用卓越 2 是否可以与个人 NAS 而不是卓越的云同步文件?