R语言删除列表中数据框a列重复行时如何保留其余列
问题原因
你原有代码仅选择了a列传入unique()函数,因此处理结果仅保留a列。另外unique()默认按整行所有列的取值判断是否重复,无法直接指定仅按某一列去重。
解决方案
基础R实现(无需加载第三方包)
使用duplicated()函数判断a列的重复项,索引原数据框的整行即可保留所有列:
my.listnew <- lapply(my.list, function(x) x[!duplicated(x$a), ])
- 如果需要保留重复行中最后一次出现的记录,可添加
fromLast = TRUE参数:
my.listnew <- lapply(my.list, function(x) x[!duplicated(x$a, fromLast = TRUE), ])
tidyverse/dplyr 实现
使用dplyr包的distinct()函数,指定.keep_all = TRUE参数即可保留除a列外的其余所有列:
library(dplyr) my.listnew <- lapply(my.list, function(x) distinct(x, a, .keep_all = TRUE))
效果验证
举个测试示例,假设其中一个数据框结构如下:
d1 <- data.frame(a = c("苹果","苹果","香蕉","香蕉","橙子"), b = 1:5, c = 6:10)
处理后输出为:
| a | b | c |
|---|---|---|
| 苹果 | 1 | 6 |
| 香蕉 | 3 | 8 |
| 橙子 | 5 | 10 |
内容的提问来源于stack exchange,提问作者Karlos Garcia
相关产品推荐
相关产品推荐

