我有一个带有部分重复的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的所有重复项?
答案 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)