R dplyr::distinct数据框记录去重

本文介绍了如何使用dplyr库中的distinct函数进行数据去重,包括全列去重、按特定列x去重以及保留所有列的情况。通过实例演示了在R语言中实现数据去重的不同应用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

library(dplyr)
df <- tibble::tibble(  
  x = sample(10, 100, rep = TRUE),  
  y = sample(10, 100, rep = TRUE)  
)  
df
# 以全部列去重
distinct(df)

# 以列x去重,仅返回去重后的x列
distinct(df, x)  

# 以列x去重,返回所有列
distinct(df, x, .keep_all = TRUE)  

转自:# http://guangzheng.name/2017/10/08/dplyr%E5%8C%85%E4%B8%AD%E7%9A%84distinct%E5%87%BD%E6%95%B0/

### 数据清洗中的数据方法 #### 使用 Pandas 进行数据 Pandas 是 Python 中用于数据分析的强大工具之一,提供了多种函数来帮助完成数据清理工作。其中 `drop_duplicates` 函数专门用来除 DataFrame 或 Series 中的复项[^1]。 以下是基于 Pandas 的数据示例: ```python import pandas as pd # 创建一个带有记录数据框 data = { 'ID': [1, 2, 3, 4, 5, 1], 'Name': ['Alice', 'Bob', 'Charlie', 'David', 'Edward', 'Alice'], 'Age': [25, 30, 35, 40, 45, 25] } df = pd.DataFrame(data) print("原始数据:") print(df) # 除完全相同的行 df_cleaned = df.drop_duplicates() print("\n除完全相同行后的数据:") print(df_cleaned) # 只针对某一列进行 df_name_unique = df.drop_duplicates(subset=['Name']) print("\n仅保留 Name 列唯一值的数据:") print(df_name_unique) ``` 上述代码展示了如何通过指定参数 `subset` 来控制哪些列参与判断是否为复项。 #### JSON 数据中应用的方法 当处理结构化程度较高的 JSON 文件时,也可以采用类似的逻辑来进行数据操作。例如,在读取多个 JSON 对象并将其转换为列表后,可以通过集合(Set)或者字典键的方式实现快速过滤[^3]。 这里给出一段简单例子说明这一过程: ```python import json # 模拟一组可能含有复条目的JSON对象数组 json_data = [ {"id": 1, "name": "Product A", "price": 10}, {"id": 2, "name": "Product B", "price": 20}, {"id": 1, "name": "Product A", "price": 10} # 复制品 ] def remove_json_duplicates(json_list): seen_ids = set() # 存储已见过的对象 ID unique_items = [] for item in json_list: if item['id'] not in seen_ids: unique_items.append(item) seen_ids.add(item['id']) # 添加到集合 return unique_items cleaned_json = remove_json_duplicates(json_data) print(cleaned_json) ``` 此片段定义了一个辅助函数 `remove_json_duplicates()` ,它接受输入的是包含若干个字典形式表示的商品信息列表,并返回一个新的不含任何冗余元素的新序列。 #### R语言下的数据方式 除了 Python 和其生态外,另一种广泛应用于统计学领域编程环境 —— **R** 同样支持高效便捷的数据整理技术。比如借助内置包 dplyr 提供的功能即可轻松达成目标[^2]: ```r library(dplyr) # 构造样本表格 sample_df <- data.frame( id=c(1L,2L,3L,4L,5L,1L), name=factor(c('A','B','C','D','E','A')), age=integer(), stringsAsFactors = FALSE ) unique_rows <- sample_df %>% distinct() cat("After removing duplicates:\n") print(unique_rows) ``` 这段脚本首先加载必要的扩展库;接着创建实验用小型关系型表单;最后调用了管道运算符 `%>%` 配合命令 `distinct()` 完成了整个流程。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值