删除R中的半重复行

时间:2017-03-21 06:04:06

标签: r

我有以下data.frame。

a <- c(rep("A", 3), rep("B", 3), rep("C",2), "D")
b <- c(NA,1,2,4,1,NA,2,NA,NA)
c <- c(1,1,2,4,1,1,2,2,2)
d <- c(1,2,3,4,5,6,7,8,9)
df <-data.frame(a,b,c,d)


  a  b c d
1 A NA 1 1
2 A  1 1 2
3 A  2 2 3
4 B  4 4 4
5 B  1 1 5
6 B NA 1 6
7 C  2 2 7
8 C NA 2 8
9 D NA 2 9

我想删除重复的行(基于A&amp; C列),以便保留B列中包含值的行。在此示例中,将删除第1行,第6行和第8行。

3 个答案:

答案 0 :(得分:1)

执行此操作的一种方法是@array由&#39; a&#39;&#39; b&#39;以及基于&#39; b&#39;的逻辑向量这样所有人都可以对于&#39; a&#39;和&#39;&#39;中的每一组,元素将是最后的。然后,应用order并仅保留非重复元素

duplicated

答案 1 :(得分:1)

首先使用以下函数创建两个数据集,一个在a列中有重复,另一个在a列中没有重复:

x = df[df$a %in% names(which(table(df$a) > 1)), ]
x1 = df[df$a %in% names(which(table(df$a) ==1)), ]

现在在数据集x上使用na.omit函数删除带NA的行,然后将x和x1重写为最终数据集。

rbind(na.omit(x),x1)

答案:

   a  b c d

2  A  1 1 2

3  A  2 2 3

4  B  4 4 4

5  B  1 1 5

7  C  2 2 7

9  D NA 2 9

答案 2 :(得分:0)

您可以使用dplyr执行此操作。

df %>% distinct(a, c,  .keep_all = TRUE)                 

输出

  a  b c d
1 A NA 1 1
2 A  2 2 3
3 B  4 4 4
4 B  1 1 5
5 C  2 2 7
6 D NA 2 9

dplyr中还有其他选项,请查看此问题以获取详细信息:Remove duplicated rows using dplyr