我有以下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行。
答案 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