【发布时间】:2023-01-24 03:01:37
【问题描述】:
我有一个大型数据库,其中有部分重复的行。我正在尝试在 dplyr 中使用带有条件语句的过滤器来删除这些部分重复的行。
目标:我想删除所有存在 a1 和 id1 的重复组合且 var1 等于 0 的行。为此,我尝试在我的过滤器函数中使用 duplicated() 调用以及条件语句。
问题:我在下面使用的下面的代码似乎忽略了 var1 等于零的最后一个条件。我尝试了两种不同的过滤方式来获得想要的结果,但无济于事。我的 duplicated() 调用有问题吗?我应该改用 distinct() 吗?
library(dplyr)
a1 <- c('adam', 'adam', 'adam', 'megan', 'megan', 'megan', 'jen', 'jen', 'jen')
id1 <- c('a', 'a', 'b', 'a', 'b', 'b', 'a', 'b', 'c')
var1 <- as.numeric(c('0', '3.2', '3', '2.2', '1.1', '0', '1.2', '2.4','3.1'))
test_df <- data.frame(a1, id1, var1)
#code to get rid of duplicates
test_df2 <- test_df %>%
filter(!(duplicated(id1) & duplicated(a1) & var1 == 0))
#alternative code
test_df3 <- test_df
test_df3$new_id <- with(test_df3, paste0(a1, sep = "-", id1))
test_df3 <- test_df3 %>%
filter(!(duplicated(new_id) & var1 == 0))
【问题讨论】: