如何删除按特征排序的重复项?

时间:2019-05-21 04:38:29

标签: r

我有一个包含四列的数据集。在第一栏中,是我的特征,我不希望该特征有任何重复。如何使用dplyr软件包中的plicate()或unique()函数选择删除哪一个?

如果第2列=女性,我希望保留该行。如果在第2列中两个副本均为1,则我希望保留第3列中编号最大的副本。如果它们在第三列中相同,那么我希望保留第四列中编号最高的那个。

所以我想从这里开始:

trait sex sample_size variants 
A F 9 9 
A M 9 9 
B F 6 9
B F 3 9
C F 3 6
C F 3 3

对此:

trait sex sample_size variants
A F 9 9 
B F 6 9
C F 3 6

1 个答案:

答案 0 :(得分:2)

一种选择是filter“性别”中的“ F”,然后arrange“性状”,“性别”列和desc中的数字列结束并得到基于“特征”和“性别”的distinct

library(dplyr)
df1 %>% 
  filter(sex == "F") %>%
  arrange(trait, sex, desc(sample_size), desc(variants)) %>% 
  distinct(trait, sex, .keep_all = TRUE)
#  trait sex sample_size variants
#1     A   F           9        9
#2     B   F           6        9
#3     C   F           3        6

数据

df1 <- structure(list(trait = c("A", "A", "B", "B", "C", "C"), sex = c("F", 
 "M", "F", "F", "F", "F"), sample_size = c(9L, 9L, 6L, 3L, 3L, 
 3L), variants = c(9L, 9L, 9L, 9L, 6L, 3L)), class = "data.frame", 
 row.names = c(NA, -6L))