根据列中的字符值删除数据框中的重复行之一

时间:2018-05-11 13:30:13

标签: r

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

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

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

虚拟数据:

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()进行条件过滤。

3 个答案:

答案 0 :(得分:1)

这样做吗?

data.df%>%
group_by(id_no)%>%
mutate(analysis_count=1:n(),singleton=n()==1)%>%
ungroup()%>%
filter(singleton|analysis_count==2)%>%
select(-analysis_count, -singleton)

答案 1 :(得分:1)

data.table方式:

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

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 documentation

答案 2 :(得分:0)

我们可以使用insert into user (user_name,tel,password,isAdmin) VALUES ('dfd','555,' 443434','0') base R

duplicated