首页 > 解决方案 > 根据列中的字符值删除数据框中的重复行之一

问题描述

在给定特定条件的情况下,我有一个包含一些重复项的数据框。

我有一列(column_A),其中包含分析结果。我的数据框中的一些 ID 有两个结果,这就是 ID 重复发生的原因。如果“id_no”中的ID在column_A中同时具有“analysisA”和“analysisB”,我想保留column_A ==“analysisB”的行,否则不要删除一行。

(请注意,我正在运行的原始数据框有多个其他字符和数字列)

虚拟数据:

structure(list(id_no = structure(c(1L, 2L, 2L, 3L, 4L, 4L), .Label = c("A", 
"B", "C", "D"), class = "factor"), column_A = structure(c(1L, 
1L, 2L, 2L, 1L, 2L), .Label = c("analysisA", "analysisB"), class = "factor")), .Names = c("id_no", 
"column_A"), row.names = c(NA, -6L), class = "data.frame")

看起来像这样:

id_no    column_A
A        analysisA
B        analysisA
B        analysisB
C        analysisB
D        analysisA
D        analysisB

预期输出:

id_no    column_A
A        analysisA
B        analysisB
C        analysisB
D        analysisB

有没有办法用 dplyr 做到这一点?我没有让它与 filter() 的条件过滤一起正常工作。

标签: r

解决方案


一种data.table方式:


在您的测试用例中,您基本上需要每个 ID 组的最后一项,因此以下 data.table 单行使用tail将起作用。

library(data.table)

dt[, tail(.SD,1), by=id_no]

将产生:

> dt[, tail(.SD,1), by=id_no]
   id_no  column_A
1:     A analysisA
2:     B analysisB
3:     C analysisB
4:     D analysisB

资源:

data.table 文档


推荐阅读