如何在R语言数据框中保留列中重复值的唯一记录?
R语言按指定列保留唯一记录的方法
针对你需要在数据框中按Assembly_ID列保留唯一记录、同时保留所有列信息的需求,这里提供几种常用的实现方法:
1. Base R 原生方法
用duplicated()函数标记重复行,筛选出非重复的记录:
# 假设你的数据框名为df df_unique <- df[!duplicated(df$Assembly_ID), ]
- 上述代码会保留每个
Assembly_ID第一次出现的完整行记录 - 如果需要保留每个
Assembly_ID最后一次出现的记录,添加fromLast = TRUE参数:
df_unique_last <- df[!duplicated(df$Assembly_ID, fromLast = TRUE), ]
2. dplyr 包(tidyverse 生态)方法
使用distinct()函数,配合.keep_all = TRUE参数保留所有列:
library(dplyr) # 保留每个Assembly_ID第一次出现的完整记录 df_unique <- df %>% distinct(Assembly_ID, .keep_all = TRUE)
- 若要保留最后一次出现的记录,可以先倒序排列再去重:
df_unique_last <- df %>% arrange(desc(row_number())) %>% distinct(Assembly_ID, .keep_all = TRUE) %>% arrange(row_number())
3. data.table 包方法(适合大数据集)
如果你的数据量较大,data.table的处理效率更高:
library(data.table) setDT(df) # 将普通数据框转换为data.table格式 # 保留每个Assembly_ID的第一条记录 df_unique <- df[, .SD[1], by = Assembly_ID] # 保留每个Assembly_ID的最后一条记录 df_unique_last <- df[, .SD[.N], by = Assembly_ID]
.SD代表每个分组的子数据框,.N是每个分组的行数,.SD[.N]即取分组的最后一行
内容的提问来源于stack exchange,提问作者Mohamed Samir
相关产品推荐
相关产品推荐

