数据重塑之数据去重

news2024/9/20 16:44:27

 下面内容摘录自:

4章7节:用R做数据重塑,数据去重和数据的匹配-CSDN博客文章浏览阅读23次。数据重塑是数据分析和数据清洗中的重要步骤,其中包括数据去重和数据匹配。理解这两个概念以及它们的实现方法对于有效处理和分析数据至关重要。https://blog.csdn.net/2301_79425796/article/details/141111121欢迎订阅我们专栏

 二、数据重塑之数据去重

数据去重(Data deduplication)是指识别并删除数据文件集合中的重复数据,仅保留唯一的数据单元,从而消除冗余数据。因为重复数据的存在不但浪费存储资源,而且可能导致数据分析结果出现偏差,所以在数据清洗过程中,去重是不可忽视的一项工作。

数据去重通常有完全去重和不完全去重两种。

完全去重是指在数据集中识别并删除那些所有字段值完全相同的重复记录。比如,在一个客户数据库中,如果两个记录的所有字段(如姓名、地址、电话等)完全相同,则其中一个记录将被删除,保留唯一的一份记录。完全去重的主要目的是消除完全重复的数据,确保每一条记录都是唯一的。

不完全去重涉及到在数据清洗过程中处理那些部分重复的数据记录。与完全去重不同,不完全去重的标准是根据数据的业务逻辑和具体需求来确定的。比如,在一个客户数据库中,两个记录可能在部分字段上相同(如姓名相同但地址不同),这种情况下,我们需要根据实际业务需求来决定是否保留这些记录,以及如何处理这些部分重复的记录。

在医学数据处理中,由于数据的复杂性和多样性,去除重复数据显得尤为重要。为了演示去重操作,

我们先创建一个就医患者的数据集。这里我们将数据集中每一行表示一个患者的就诊记录,包括患者 ID、姓名、年龄、诊断、住址和就诊日期等信息。我们将探讨完全去重和不完全去重的应用场景,并演示如何使用 duplicated() 函数实现不完全去重。

# 创建扩展的示例患者数据集
patients_data <- data.frame(
 PatientID = c(1, 2, 3, 1, 4, 5, 6, 3, 7, 8, 9, 3, 10, 11),
 Name = c("张三", "李四", "王五", "张三", "赵六", "孙七", "周八", "王五", "吴九", "王五", "李四", "王五", "李四", "赵六"),
 Age = c(30, 45, 28, 30, 60, 50, 34, 28, 41, 28, 45, 29, 45, 60),
 Diagnosis = c("感冒", "高血压", "糖尿病", "感冒", "冠心病", "关节炎", "胃炎", "糖尿病", "肺炎", "胃炎", "高血压", "糖尿病", "感冒", "冠心病"),
 Address = c("北京", "上海", "广州", "北京", "天津", "深圳", "南京", "广州", "杭州", "南京", "上海", "上海", "北京", "天津"),
 VisitDate = as.Date(c('2024-01-01', '2024-01-02', '2024-01-03', '2024-01-01', '2024-01-04', '2024-01-05', '2024-01-06', '2024-01-03', '2024-01-07', 
                       '2024-01-06', '2024-01-02', '2024-01-03', '2024-01-01', '2024-01-04'))
)

# 显示扩展后的原始患者数据集
print("扩展后的原始患者数据集:")
print(patients_data)

数据可见:

   PatientID Name Age Diagnosis Address  VisitDate
1          1 张三  30      感冒    北京 2024-01-01
2          2 李四  45    高血压    上海 2024-01-02
3          3 王五  28    糖尿病    广州 2024-01-03
4          1 张三  30      感冒    北京 2024-01-01
5          4 赵六  60    冠心病    天津 2024-01-04
6          5 孙七  50    关节炎    深圳 2024-01-05
7          6 周八  34      胃炎    南京 2024-01-06
8          3 王五  28    糖尿病    广州 2024-01-03
9          7 吴九  41      肺炎    杭州 2024-01-07
10         8 王五  28      胃炎    南京 2024-01-06
11         9 李四  45    高血压    上海 2024-01-02
12         3 王五  29    糖尿病    上海 2024-01-03
13        10 李四  45      感冒    北京 2024-01-01
14        11 赵六  60    冠心病    天津 2024-01-04

1、完全去重

在上面数据集中,如果一条患者记录的所有字段(如 PatientIDNameAgeDiagnosisAddress 和 VisitDate)都与另一条记录相同,则认为它是完全重复的,需要删除。我们可以使用R中的unique()函数删除完全重复的行,只保留一个记录:

# 使用 unique() 函数进行完全去重
unique_patients <- unique(patients_data)

# 显示完全去重后的患者数据集
print("完全去重后的患者数据集:")
print(unique_patients)

去重后的数据集为:

   PatientID Name Age Diagnosis Address  VisitDate
1          1 张三  30      感冒    北京 2024-01-01
2          2 李四  45    高血压    上海 2024-01-02
3          3 王五  28    糖尿病    广州 2024-01-03
5          4 赵六  60    冠心病    天津 2024-01-04
6          5 孙七  50    关节炎    深圳 2024-01-05
7          6 周八  34      胃炎    南京 2024-01-06
9          7 吴九  41      肺炎    杭州 2024-01-07
10         8 王五  28      胃炎    南京 2024-01-06
11         9 李四  45    高血压    上海 2024-01-02
12         3 王五  29    糖尿病    上海 2024-01-03
13        10 李四  45      感冒    北京 2024-01-01
14        11 赵六  60    冠心病    天津 2024-01-04

可以看到,去重后数据集中的重复记录已被成功移除。

2、不完全去重

除了使用unique()函数进行完全去重外,在实际的数据清洗工作中,还可能遇到需要基于部分字段进行去重的需求。R中的duplicated()函数可以帮助我们识别部分字段的重复记录,然后根据这些重复记录进行去重操作。

接上面的例子,我们可以根据实际业务逻辑来决定如何处理这些有部分重复的记录。所以,我们将基于 VisitDate 和 Address 进行去重,保留记录中患者的首次出现。

# 基于 VisitDate 和 Address 进行去重,保留首次记录
non_dup_patients <- patients_data[!duplicated(patients_data[, c("VisitDate", "Address")]), ]

上面这行代码的目的是对患者数据集进行不完全去重,具体来说:提取 VisitDate 和 Address 列: 选择这两个列作为去重的基础,意思是我们希望找到在同一天、同一地点就诊的重复记录。检测重复: 使用 duplicated() 函数检测 VisitDate 和 Address 组合中的重复记录。保留首次记录: 通过 !duplicated() 的逻辑反转操作,仅保留每组 VisitDate 和 Address 组合中的第一条记录,其余重复记录将被去掉。创建去重后的数据框: 最终,去重后的数据框被赋值给 non_dup_patients,该数据框中只包含每个 VisitDate 和 Address 组合的首次出现的记录,其他重复项已被删除。

运行上述代码,我们可以识别出哪些行是基于PatientAge字段的重复记录,并将这些重复记录删除,得到最终的数据集。

# 显示按 VisitDate 和 Address 去重后的患者数据集(保留首次记录)
print("按 VisitDate 和 Address 去重后的患者数据集(保留首次记录):")
print(non_dup_patients)

结果可见:

   PatientID Name Age Diagnosis Address  VisitDate
1          1 张三  30      感冒    北京 2024-01-01
2          2 李四  45    高血压    上海 2024-01-02
3          3 王五  28    糖尿病    广州 2024-01-03
5          4 赵六  60    冠心病    天津 2024-01-04
6          5 孙七  50    关节炎    深圳 2024-01-05
7          6 周八  34      胃炎    南京 2024-01-06
9          7 吴九  41      肺炎    杭州 2024-01-07
12         3 王五  29    糖尿病    上海 2024-01-03

2、数据的匹配

数据匹配(Data Matching)是指基于某个或某些相同的变量(字段),将两个数据框合并在一起。数据匹配操作在数据预处理和整合中非常常见,尤其在处理来自不同数据源的医学数据时更是如此。常见的匹配操作包括左连接(left join)、右连接(right join)、内连接(inner join)、全连接(full join)、半连接(semi join)和反连接(anti join)。我们将以构建两个示例数据框为基础,逐步演示这些操作的实现和实际应用场景。

  .........

欢迎订阅我们专栏,深度系统地学习R语言。 

为帮助大家更出色地掌握临床统计、数据挖掘以及人工智能建模的入门知识和应用,由于众多同学在计算机编程上经验欠缺,特此开设《R 语言与数据科学的终极指南》专栏。该专栏每周至少会定期更新三篇,直到整个专栏更新完成。每篇文章都在 5000 字以上,质量平均分高达 94 分。要提醒大家的是,每结束一个章节,专栏的优惠力度就会减小,当下正是订阅的最佳优惠时段,诚邀各位积极订阅!

专栏《R 语言与数据科学的终极指南》链接:https://blog.csdn.net/2301_79425796/category_12729892.html?spm=1001.2014.3001.5482

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2038370.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

告别转换难题,四款PDF转CAD工具分享

CAD很难搞&#xff0c;将PDF转换为CAD更难搞&#xff0c;想要快速且完整的将PDF文件转换为CAD&#xff0c;自然不是靠一点点的复制重做&#xff0c;直接用PDF转CAD工具就能搞定。那用什么工具呢&#xff1f;我这就给你们捋捋几个神器是怎么帮我们搞定这个难题的。 1.PDF365在线…

milvus helm k8s开启权限管理,attu管理

version:2.4.5 apiVersion: v1 kind: ConfigMap metadata: name: my-release-milvus 该configMap 添加 &#xff0c;然后重启milvus 集群可生效 user.yaml: |-common:security:authorizationEnabled: true或者直接在value.yaml 中添加该配置 extraConfigFiles:user.yaml: |com…

程序员 10 个摸鱼神器分享给大家

问&#xff1a;程序员该不该上班摸鱼&#xff1f; 答&#xff1a;认真上班是劳动换取报酬&#xff0c;上班摸鱼才是从老板那赚钱。 曝光&#xff0c;程序员的 10 个摸鱼神器 摸鱼一时爽&#xff0c;一直摸一直爽 方案一&#xff1a;实物摸鱼方案二&#xff1a;命令行斗地主方案…

抖音用户主页视频数据爬虫详解(点赞,收藏,分享等)

一. 首先进行抓包分析&#xff0c;&#xff0c;&#xff0c;随便找个主页&#xff0c;f12&#xff0c;关键词搜索&#xff0c;发现这个包是以post开头 二.查看请求参数&#xff1a; 我们复制curl在spiderbox里面快速形成请求 对headers&#xff0c;params进行尝试删减&#x…

Linux下用gdb找到cpu占用率最高的线程

我们调试程序的时候&#xff0c;有时候会发现当程序运行时&#xff0c;会出现cpu占用率很高的情况。 一般情况下&#xff0c;程序执行时&#xff0c;cpu占用率比较高的话&#xff0c;就会影响其它程序的执行&#xff0c;所以就需要对程序进行优化&#xff0c;查找程序运行时&a…

亚马逊云科技产 Amazon Neptune 图数据库服务体验

目录 图数据库为什么使用图数据库Amazon Neptune实践登陆创建 S3 存储桶notebook图神经网络快速构建加载数据配置端点Gremlin 查询删除环境删除 S3 存储桶 总结 图数据库 图数据库是一种专门用于存储和处理图形数据结构的数据库管理系统。图形数据结构由节点&#xff08;Node&…

轻松打造:基于本地知识库的私有GPT助手定制教程”

背景知识 众所周知&#xff0c;目前大模型 LLM 的能力已经非常强大&#xff0c;chatgpt 已经可以很好的解决通用型问题&#xff0c;但是对于垂直专业领域的问题处理的还不够好。如果要利用 LLM 大模型根据已有的特定领域的知识&#xff0c;推理出该领域特定问题的答案&#xf…

node.js part1

Node.js Node.js 是一个跨平台JavaScript 运行环境&#xff0c;使开发者可以搭建服务器端的 JavaScript 应用程序。作用&#xff1a;使用Node.js编写服务器端程序 编写数据接口&#xff0c;提供网页资源浏览功能等等 前端工程化&#xff1a;为后续学习Vue和React等框架做铺垫. …

51单片机学习记录-数码管操作

这里实现了静态数码管的显示。51单片机一共有可以显示4个数字&#xff0c;可以通过控制P2(4-2)的端口选择8个数字显示器中的一个显示数字&#xff0c;控制P0端口写入显示的数值信息。将操作的逻辑使用了函数Nixie进行了封装。 #include <8051.h>unsigned char NixieTabl…

PHP汽车保养维修信息管理系统小程序源码

&#x1f697;爱车守护神器&#xff01;揭秘“汽车保养维修信息管理系统”全攻略&#x1f50d; &#x1f525;【开篇揭秘&#xff1a;为何你需要它&#xff1f;】&#x1f525; 在这个快节奏的时代&#xff0c;爱车不仅是代步工具&#xff0c;更是生活品质的象征。但你是否曾…

C++_基本语法笔记_继承和多态

继承 思想与Java差不多 基本语法 语法&#xff1a;class 子类 : 继承方式 父类 继承方式 将访问权限&#xff0c;上升到保护权限&#xff0c;上升到更高的私有权限 继承哪些部分 继承过程中&#xff0c;即使权限不能访问&#xff0c;也会全部继承下来&#xff08;非静…

Liunx搭建Rustdesk远程桌面服务

1、环境准备 Linux&#xff1a;centos7.9 rustdesk server安装包 很多新服务器并没有 wget 和unzip 可以通过yum自行安装下&#xff0c;如果系统中有wget但不能使用&#xff0c;直接卸载重装即可。 yum install wget wget --no-check-certificate https://github.com/rust…

商家福音!阿里巴巴1688又一线下选品中心落地!

7月31日&#xff0c;阿里旗下1688台州选品中心正式开园。后续1688将在核心产业带陆续开设线下选品中心。选品中心的运营模式为“四位一体”&#xff1a;政府搭台&#xff0c;1688提供技术、销售渠道和数字化能力&#xff0c;本地产业链的链主负责运营&#xff0c;本地源头工厂入…

跟着iMeta学做图|ggplot2绘制多个饼图展示菌群物种组成

原始教程链接&#xff1a;https://github.com/iMetaScience/iMetaPlot/tree/main/221017multi-pieplot 写在前面 饼图 (Pie Plot) 在微生物组研究中可以用来展示菌群物种组成&#xff0c;可以起到与堆叠柱状图相同的展示效果。本期我们挑选2022年4月5日刊登在iMeta上的The imp…

浅谈大模型私有化+精调:面向垂直行业与特定场景之需

今天将继续“AI技术”系列&#xff0c;探讨大模型的私有化和精调&#xff0c;以便让预训练的通用模型更好地适应特定的任务或行业需求。 当然&#xff0c;从产品经理的视角出发&#xff0c;我们不会非常深入&#xff08;鄙人能力也有限&#xff09;&#xff0c;而是建立相关的…

HTTP协议和web服务器(Tomcat)

Author&#xff1a;Dawn_T17&#x1f965; 目录 二.请求协议 三.响应协议 四.协议解析 Socket 编程 Servlet介绍 Web服务器 五.Tomcat 简介 HTTP 即超文本传输协议 它是一种应用层协议&#xff0c;用于客户端&#xff08;如浏览器&#xff09;和服务器之间的通信。 为什…

《网络安全自学教程》- Linux安全标识符、身份鉴别、访问控制

《网络安全自学教程》 操作系统有4个安全目标&#xff0c;也就是说想要保证操作系统的安全&#xff0c;就必须实现这4个需求&#xff1a; 标识系统中的用户和进行身份鉴别。依据系统安全策略对用户的操作进行访问控制&#xff0c;防止用户和外来入侵者对计算机资源的非法访问。…

mysql误删数据恢复记录

背景 1、数据库版本 5.7.36&#xff0c;由于误操作删掉了表的所有数据&#xff0c;但是数据库备份每天凌晨进行、只能从备份恢复昨日的全量数据&#xff0c;当日的数据将会丢失 查看binlog配置 尝试恢复 1、找到binlog文件 误删除后立即刷新binlog flush logs 2、binlog转…

OpenAI GPT-2 model use with TensorFlow JS

题意&#xff1a;使用 TensorFlow JS 应用 OpenAI GPT-2 模型 问题背景&#xff1a; Is that possible to generate texts from OpenAI GPT-2 using TensorFlowJS? 是否可以使用 TensorFlowJS 生成 OpenAI GPT-2 的文本&#xff1f; If not what is the limitation, like mo…

010集——按值传递、按引用传递等方法——C#学习笔记

按值传递参数 这是参数传递的默认方式。在这种方式下&#xff0c;当调用一个方法时&#xff0c;会为每个值参数创建一个新的存储位置。 实际参数的值会复制给形参&#xff0c;实参和形参使用的是两个不同内存中的值。所以&#xff0c;当形参的值发生改变时&#xff0c;不会影…