删除以虚拟变量为条件的重复项

时间:2019-02-04 16:18:56

标签: r dataframe duplicates

我有一个带有部分重复的ID和一个虚拟变量的数据框。我想删除所有具有重复ID的行,但前提是虚拟变量等于1。

请考虑以下示例数据:

# Example data
df <- data.frame(id = c(1, 2, 3, 3, 4, 4, 5, 5, 5),
                 values = c(0, 1, 1, 0, 0, 0, 1, 0, 0))

输出应如下所示

# Expected output
df_expected <- df[- c(3, 7), ]

我如何删除values等于1的所有重复项?

1 个答案:

答案 0 :(得分:1)

我们可以在'id'列上使用duplicated并创建'values'为1的逻辑条件

i1 <- (duplicated(df$id)|duplicated(df$id, fromLast = TRUE)) & df$values == 1
df[!i1, ]
#  id values
#1  1      0
#2  2      1
#4  3      0
#5  4      0
#6  4      0
#8  5      0
#9  5      0

或与filter中的dplyr一起

library(dplyr)
df %>% 
   group_by(id) %>% 
   filter(!values|n() == 1)